LeetCode.107.Binary Tree Level Order Traversal II 二叉树自底向上层次遍历

题目描述

107 Binary Tree Level Order Traversal II https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

For example: Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

return its bottom-up level order traversal as:

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

相似题目

LeetCode.102.Binary Tree Level Order Traversal 二叉树的层次遍历 LeetCode.107.Binary Tree Level Order Traversal II 二叉树自底向上层次遍历 103 Binary Tree Zigzag Level Order Traversal https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/


解题过程

public List<List<Integer>> levelOrderBottom(TreeNode root) {
    if (null == root) {
        return Collections.emptyList();
    }

    // 用栈存放 自顶向下 的层次遍历结果,最后出栈即是结果
    Deque<List<Integer>> arrayDeque = new ArrayDeque<>();

    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    while (!queue.isEmpty()) {
        // 每层的结点个数
        int size = queue.size();
        List<Integer> levelList = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            TreeNode treeNode = queue.poll();
            levelList.add(treeNode.val);
            if (null != treeNode.left) {
                queue.offer(treeNode.left);
            }
            if (null != treeNode.right) {
                queue.offer(treeNode.right);
            }
        }
        // 遍历完当前层
        arrayDeque.push(levelList);
    }

    // Deque 流数据就是后进先出的,相当于 Collections.reverse()
    return arrayDeque.stream().collect(Collectors.toList());
}

GitHub代码

algorithms/leetcode/leetcode/_107_BinaryTreeLevelOrderTraversal2.java https://github.com/masikkk/algorithms/blob/master/leetcode/leetcode/_107_BinaryTreeLevelOrderTraversal2.java