从上到下打印二叉树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; }}