题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路
1.创建一个队列用于存储结点(按照每行存储)
2.声明两个变量 nextNode(代表已经输出的大小) size(代表队列的大小)
3.根据两个变量是否相等控制队列每行输出
具体图解如下
具体实现代码如下
public class Solution {
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
// 代码的鲁棒性
if (pRoot == null){
return lists;
}
// 声明一个队列
Queue<TreeNode> queue = new LinkedList<>();
ArrayList<Integer> list = new ArrayList<>();
queue.add(pRoot);
// 每一行结点的个数
int nextNode = 0;
// 队列的大小
int size = 1;
while (!queue.isEmpty()){
TreeNode node = queue.poll();
list.add(node.val);
nextNode++;
// 左孩子加入到队列
if (node.left != null){
queue.add(node.left);
}
// 右孩子加入到队列
if (node.right != null){
queue.add(node.right);
}
// 判断每行结点个数与队列大小是否相等
if (nextNode == size){
// 队列重新赋值
size = queue.size();
nextNode = 0;
lists.add(list);
// 创一个新的对象 用来存储新一行的结点
list = new ArrayList<>();
}
}
return lists;
}
}
NowCoder(Online Coding, Please Click)