题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
代码:
<span style="color:#000099;">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;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
//先把需要的准备好
ArrayList<ArrayList<Integer>> arrayList = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();//queue 是一个接口
if(pRoot != null){
int nextNodes = 0;
int needPrint = 1;//初始状态,下一层节点0,需要被打印的结点1,下一层节点在循环中递增
queue.add(pRoot);
while(!queue.isEmpty()){
//队不空的情况下
TreeNode node = queue.peek();
list.add(node.val);//只需要把结点的值存起来就行了
if(node.left != null){
queue.add(node.left);
++nextNodes;
}
if(node.right != null){
queue.add(node.right);
++nextNodes;
}
queue.poll();//移除队列一个元素
--needPrint;
if(needPrint == 0){
arrayList.add(new ArrayList(list));//一行打完了,到下一行
list.clear();
needPrint = nextNodes;
nextNodes = 0;
}
}
}
return arrayList;
}
}</span>