从上往下打印出二叉树的每个节点,同层节点从左至右打印。
分析:我们使用一个队列把每个节点放入,用last来记录正在打印的最右节点,nLast表示下一行的最右节点,temp集合表示每行的节点值,result表示最后所有按层遍历的值。nLast一直记录最新加入队列的节点,如果last和出队列的值相等说明需要换行继续,然后nLast赋值last,result添加temp的所有值,temp清空,队列不为空继续以上操作。
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> temp=new ArrayList<>();
ArrayList<Integer> result=new ArrayList<>();
LinkedList<TreeNode> queue=new LinkedList<>();
TreeNode last=root;
TreeNode nLast=null;
TreeNode node=null;
queue.offer(root);
if(root==null){
return temp;
}
while(!queue.isEmpty()){
node=queue.poll();
temp.add(node.val);
if(node.left!=null){
queue.offer(node.left);
nLast=node.left;
}
if(node.right!=null){
queue.offer(node.right);
nLast=node.right;
}
if(node==last){
result.addAll(temp);
temp.clear();
last=nLast;
}
}
return result;
}