题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:此题实际上与上面一题按之字形顺序打印相似,知识不需要判断打印的顺序是从左往右还是从右往左,这题的解法主要是要统计每一层的节点数。
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>> resultList = new ArrayList<ArrayList<Integer>>();
if(pRoot == null){
return resultList;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(pRoot);
ArrayList<Integer> result = new ArrayList<Integer>();
int begin = 0;
int end = 1;
while(!queue.isEmpty()){
TreeNode curNode = queue.poll();
result.add(curNode.val);
begin++;
if(curNode.left != null){
queue.add(curNode.left);
}
if(curNode.right != null){
queue.add(curNode.right);
}
if(begin == end){
resultList.add(result);
end = queue.size();
begin = 0;
//一行打印完毕之后,需要创建的result集合保存下一行遍历的元素
result = new ArrayList<Integer>();
}
}
return resultList;
}
}