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