从上到下打印二叉树II
和后面那道题不同,这道题要按层打印,也就是定义一个数组,外面的个数是层数,而后每个数是每一层的值的数组
题目剖析
将本层全副节点打印到一行,并将下一层全副节点退出队列,以此类推,即可分为多行打印。
须要定义四个数组
题解
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> reu = new ArrayList<>();
//如果根节点为空就返回一个空的汇合
if(root == null) return reu;
//定义一个寄存节点的数组
List<TreeNode> tarr = new ArrayList<TreeNode>();
//先把根节点加进去
tarr.add(root);
//和后面那道题一样
while(tarr.size()!=0){
//在这外面还要从新定义两个数组,用于寄存每层的
List<Integer> narr = new ArrayList<Integer>();
List<TreeNode> carr = new ArrayList<TreeNode>();
while(tarr.size()!=0){
TreeNode temp = tarr.get(0);
tarr.remove(0);
//寄存值
narr.add(temp.val);
//将根节点的左右节点放在新的节点数组中
if(temp.left!=null) carr.add(temp.left);
if(temp.right!=null) carr.add(temp.right);
}
//将每一层退出数组中
reu.add(narr);
//while完结阐明此时tarr是空的,然而carr因为退出了左右节点,所以不为空
//此时tarr是对carr的援用
tarr = carr;
}
return reu;
}
}
发表回复