一、题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
二、代码分析
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(pRoot == null){
return result;
}
//使用队列,先进先出
Queue<TreeNode> layer = new LinkedList<TreeNode>();
ArrayList<Integer> layerList = new ArrayList<Integer>();
layer.add(pRoot);
int start = 0, end = 1;//start记录本层打印了多少个,end记录下一层要打印多少个
while(!layer.isEmpty()){
TreeNode cur = layer.remove();
layerList.add(cur.val);//添加本行打印的List里
start++;
//每打印一个节点,就把此节点的下一层的左右节点加入队列,并记录下一层要打印的个数
if(cur.left!=null){
layer.add(cur.left);
}
if(cur.right!=null){
layer.add(cur.right);
}
//本层打印完毕
if(start == end){
end = layer.size();
start = 0;
result.add(layerList);
layerList = new ArrayList<Integer>();
}
}
return result;
}
}
转载请标明出处,原文地址:https://blog.csdn.net/weixin_41835916
如果觉得本文对您有帮助,请点击顶支持一下,您的支持是我写作最大的动力,谢谢。