Traverse

102 Level Traverse - top down

  • BFS, use queue

  • Queue size is changing in for loop

public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> result = new ArrayList<>();
    Deque<TreeNode> queue = new LinkedList<>();

    if (root == null){
        return result;
    }
    queue.add(root);
    while(!queue.isEmpty()){
        List<Integer> level = new ArrayList<>();
        // queue size is changing is for loop
        int level_size = queue.size();  
        for (int i = 0; i < level_size; i++){
            TreeNode node = queue.poll();
            level.add(node.val);

            if (node.left != null){
                queue.add(node.left);
            }
            if (node.right != null){
                queue.add(node.right);
            }
        }
        result.add(level);
    }
    return result;
}

107 Level traverse - bottom up

  1. top down then reverse

  2. get the depth first, use dfs to store elements in each level

103 ZigZag

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

  • Add array to result

  • Use % to decide odd or even array

  • ArrayList.add(0, int) - addFirst

297. Serialize and Deserialize Binary Tree

  • output string is preorder string

Last updated

Was this helpful?