Level Order Traversal

// BFS
public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> results = new ArrayList<>();
    if (root == null) {
        return results;
    }
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    while (!queue.isEmpty()) {
        List<Integer> curtLevel = new ArrayList<>();
        int size = queue.size();
        for (int i = 0 ; i < size; i++) {
            TreeNode head = queue.poll();
            curtLevel.add(head.val);
            if (head.left != null) {
                queue.offer(head.left);
            }
            if (head.right != null) {
                queue.offer(head.right);
            }
        }
        results.add(curtLevel);
    }
    return results;
}

// DFS
public void helper(TreeNode node, int level, List<List<Integer>> results) {
if (results.size() == level) {
  results.add(new ArrayList<>());
}
results.get(level).add(node.val);
if (node.left != null) helper(node.left, level + 1, results);
if (node.right != null) helper(node.right, level + 1, results);
}

BFS: Reverse result by using Collections.reverse(results);

Reverse order when it is in odd level.

Replace result when the curt node is the first of each level

BFS traverse this tree. Add children of node to the tree. Break if reach null. Pop all nodes in the queue, there are not null nodes, this means there is a sequence of null -> node -> null in the queue, which is not a complete tree.

Move all nodes to the very left by using queue. When insert, check if the left node is null, then insert on left. Otherwise insert on right, then add left + right nodes to queue, and poll curt.

Last updated