//给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
//
// 例如:
//给定二叉树 [3,9,20,null,null,15,7],
//
//
// 3
// / // 9 20
// / // 15 7
//
//
// 返回其自底向上的层序遍历为:
//
//
//[
// [15,7],
// [9,20],
// [3]
//]
//
// Related Topics 树 广度优先搜索
// ?? 384 ?? 0
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;
}
}
原文:https://www.cnblogs.com/nayou/p/14261678.html