问题描述:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
示例1
输入
{8,6,10,5,7,9,11}
返回值
[[8],[6,10],[5,7,9,11]]
思路1:
- 使用队列来模拟先进先出的数据结构(在爪哇中 LinkedList可以作为队列使用);
- 先把root节点压入队列中;
- 弹出root节点,如果它的左右孩子不为空,就把左右孩子压入队列中,并且使用count计数器代表不为空的孩子的数量;
- 再弹出count个元素,重复3,4.
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > res = new ArrayList<>();
if(pRoot == null){
return res;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(pRoot);
int validNums = 1; //有效数字
while(!queue.isEmpty()){
ArrayList<Integer> list = new ArrayList<>();
int count = 0;
for(int i=0;i<validNums;i++){
TreeNode node = queue.poll();
list.add(node.val);
if(node.left != null){
queue.add(node.left);
count++;
}
if(node.right != null){
queue.add(node.right);
count++;
}
}
validNums = count;
res.add(list);
}
return res;
}
}