Loading

107. 二叉树的层序遍历 II

107. 二叉树的层序遍历 II

//给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 
//
// 例如: 
//给定二叉树 [3,9,20,null,null,15,7], 
//
// 
//    3
//   / \
//  9  20
//    /  \
//   15   7
// 
//
// 返回其自底向上的层序遍历为: 
//
// 
//[
//  [15,7],
//  [9,20],
//  [3]
//]
// 
// Related Topics 树 广度优先搜索 
// 👍 384 👎 0

BFS

class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        //创建队列
        LinkedList<List<Integer>> list = new LinkedList<>();
        if (root == null) return list;
        Queue<TreeNode> queue = new LinkedList();
        queue.offer(root);
        //bfs
        while (!queue.isEmpty()) {
            int n = queue.size();
            List<Integer> level = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                TreeNode node = queue.poll();
                level.add(node.val);
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
            //添加到队列 头部
            list.addFirst(level);
        }
        return list;
    }
}
posted @ 2021-01-11 13:29  sstu  阅读(85)  评论(0编辑  收藏  举报