标签:ret 特点 solution while array 判断 art 第一个 strong
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
使用depth表示当前打印的层数。
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
if(pRoot == null) return list;
depth(pRoot,1,list);
return list;
}
private void depth(TreeNode root,int depth,ArrayList<ArrayList<Integer>> list){
if(root == null) return; //当前节点为空
if(depth > list.size()){ //先扩容判断
list.add(new ArrayList<Integer>());
}
list.get(depth-1).add(root.val); //再添加元素
depth(root.left,depth+1,list); //向左递归
depth(root.right,depth+1,list); //向右递归
}
利用队列先进先出的特点。
start = end
时,说明本层已经打印完毕。统计下一层应打印的节点,重置start,List重新赋值。 public class Solution {
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
if (pRoot == null) return list;
Queue<TreeNode> queue = new LinkedList<>();
ArrayList<Integer> arrList = new ArrayList<>();
int start = 0; //本层已打印节点
int end = 1; //本层应打印节点
queue.add(pRoot); //root加入队列
while (!queue.isEmpty()) {
pRoot = queue.remove();
arrList.add(pRoot.val);
start++;
if (pRoot.left != null) queue.add(pRoot.left); //左节点不为空
if (pRoot.right != null) queue.add(pRoot.right);//右节点不为空
if (start == end) { //本层打印结束
end = queue.size(); //计算end
start = 0; //重置start
list.add(arrList);
arrList = new ArrayList<Integer>(); //list重新赋值
}
}
return list;
}
}
标签:ret 特点 solution while array 判断 art 第一个 strong
原文地址:https://www.cnblogs.com/le-le/p/12787679.html