这里需要使用两个变量:now 当前层没有打印的节点个数
next 下一层的节点个数
每当当前层打印完毕 就把下一的节点个数(next)赋值给now
import java.util.ArrayList;
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
/*
这里需要使用两个变量:now 当前层没有打印的节点个数
next 下一层的节点个数
每当当前层打印完毕 就把下一的节点个数(next)赋值给now
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> container=new ArrayList<ArrayList<Integer>>();
if (pRoot==null) return container;
ArrayList<Integer>inner=new ArrayList<Integer>();
Queue<TreeNode> queue= new LinkedList<TreeNode>();
queue.offer(pRoot);
int now=1;//当前层中没有打印的节点数 根节点没有打印 初始值取1
int next=0;//下一层中的节点总数 初始时 下一层还没有入队列 未统计 初始取值为0
while(!queue.isEmpty()){
TreeNode t=queue.poll();
inner.add(t.val);
now--;
if(t.left!=null){
queue.offer(t.left);
next++;
}
if(t.right!=null){
queue.offer(t.right);
next++;
}
if(now==0){//当前层打印完成 把下一层的节点总数赋值给now next清零
container.add(inner);
inner=new ArrayList<Integer>();
now=next;
next=0;
}
}
return container;
}
}