题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解析:层次遍历二叉树,要点是要用队列存储节点信息。还有个问题,如何知道要换层?答案是用一个计数器current指示当前层的节点个数,next记录下一层的节点个数,每次出队一次就current减1,直到current为0,就知道当前层遍历完了,再把下一层的next值赋值给当前current,next值为0,重新计数。具体的操作见代码
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>> result = new ArrayList<>();
if(pRoot==null){
return result;
}
Queue<TreeNode> queue = new LinkedList();//存储遍历的节点
ArrayList<Integer> temp = new ArrayList<>();//存储每一层的值
queue.add(pRoot);
int current =1;//第一层只有一个节点root
int next=0;
while(!queue.isEmpty()){
TreeNode node =queue.poll();
temp.add(node.val);//出队一个元素就记录到当前层
current--;
if(node.left!=null){
queue.add(node.left);
next++;
}
if(node.right!=null){
queue.add(node.right);
next++;
}
if(current==0){//当前层遍历完了
current=next;//下一层的个数赋值给当前层
next=0;//下一层的计数归0
result.add(temp);//当前层的值添加到result
temp=new ArrayList<>();
}
}
return result ;
}
}