剑指[32]-由上至下打印二叉树
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指[32]-由上至下打印二叉树相关的知识,希望对你有一定的参考价值。
题目来源:剑指 Offer 32 - II. 从上到下打印二叉树 II
题目描述
从上到下按层打印二叉树,
同一层的节点按从左到右的顺序打印,
每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \\
9 20
/ \\
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
本次题目和上次的思路相同,但是返回值略有不同,每次遍历取出一层元素就存入一个新创建的集合;
然后再存入总集合;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> l1 = new ArrayList<List<Integer>>();
//思路和之前一样,但是这次比较特殊的是,直接返回集合;且每一层遍历完都放入一个集合;
//空树就直接返回空集合;
if(root==null) return l1;
//还是一样的;创建队列存元素;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
//队列不为空就操作;
while (!queue.isEmpty()){
//注意这里是创建一个集合存入; 集合 l2添加的是 一层,一层遍历的元素;
//且每次循环都会创建一个集合 l2;
List<Integer> l2 = new ArrayList<>();
int num = queue.size();
for (int i = 0; i < num; i++) {
//队头元素出队;存入集合l2;
TreeNode poll = queue.poll();
l2.add(poll.val);
//判断是否有左右子树,若有就存入队列;
if(poll.left!=null) queue.add(poll.left);
if(poll.right!=null) queue.add(poll.right);
}
//每次取一层存到了集合 l2 ,然后再依次存入总集合 l1;
l1.add(l2);
}
return l1;
}
}
以上是关于剑指[32]-由上至下打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章