107. Binary Tree Level Order Traversal II

BFS by using queue/linkedlist, dfs using recursion

class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        LinkedList<List<Integer>> result = new LinkedList<>();
        if(root == null) return result;
        queue.offer(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            List<Integer> list = new LinkedList<>();
            for(int i = 0; i<size; i++){
                root = queue.poll();
                list.add(root.val);
                if(root.left!=null) queue.offer(root.left);
                if(root.right!=null) queue.offer(root.right);
            }
            result.addFirst(list);
        }
        return result;
    }
}
class Solution {
    int depth = -1;
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        LinkedList<List<Integer>> result = new LinkedList<>();
        recursion(result, root, 0);
        return result;
    }
    private void recursion(LinkedList<List<Integer>> list, TreeNode node, int level){
        if (node == null) return;
        
        // preOrder
        if(level>depth){
            list.addFirst(new LinkedList<Integer>());
            list.get(0).add(node.val);
            depth = level;
        }else{
            list.get(depth-level).add(node.val);
        }
        level++;
        recursion(list, node.left, level);
        recursion(list, node.right, level);
    }
}

Last updated