3.9 Binary Tree Level Order Traversal

Print a binary tree into array list in tree level order

Example

Given binary tree {3,9,20,#,#,15,7}

    3
   / \
  9  20
    /  \
   15   7

Return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]

Logical Steps

  1. Use queue to keep BFS running. The size of the queue before each iteration is the length of each level
  2. In each iteration, add left and right node into queue, if they are not null

Code Template

public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>> ();

    // if root is empty, return empty result
    if (root == null)
        return result;

    // create a queue of TreeNodes for BFS
    LinkedList<TreeNode> queue = new LinkedList<TreeNode>();

    // initialization: add root to queue
    queue.add(root);

    // outer loop: keep BST running when queue is not empty
    while(!queue.isEmpty()) {
        ArrayList<Integer> level = new ArrayList<Integer>();

        // the size of the queue is the length of each level
        int size = queue.size();

        /**
         * pop all nodes from current level, and add the left and right
         * node into queue, if they're not empty
         */
        while(size > 0) {
            TreeNode curr = queue.pop();
            level.add(curr.val);

            if (curr.left != null)
                queue.offer(curr.left);

            if (curr.right != null)
                queue.offer(curr.right);

            size--;
        }

        // add current level into result
        result.add(new ArrayList(level));
    }

    return result;
}