从上到下打印二叉树II

image.png
和前面那道题不同,这道题要按层打印,也就是定义一个数组,里面的个数是层数,然后每个数是每一层的值的数组

题目分析

将本层全部节点打印到一行,并将下一层全部节点加入队列,以此类推,即可分为多行打印。
需要定义四个数组

题解

/**
 * 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;
    }
}

Loccy
4 声望1 粉丝