Leetcode-每日一题【剑指 Offer 32 - II. 从上到下打印二叉树 II】

题目

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

提示:

  1. 节点总数 <= 1000

解题思路

1.题目要求我们从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。这道题与【剑指 Offer 32 - I. 从上到下打印二叉树】思路完全一致,大家可以先去学习一下。

2.唯一不同的就是需要将每一层打印到一行,那么我们就新建一个(List> res = new ArrayList<>();)动态数组去存储元素,在每次while循环开始时,我们都需要统计出队列中元素的个数,因为在结束了一次 while 循环后,队列中存储的元素是同一层的元素,所以我们需要统计出个数,并且新建一个动态数组 cur 将一层的元素存储进去,并且等 cur 数组存储结束后,再将 cur 数组存入我们最终的 res 数组中。直到 队列为空,打印也就结束了。

代码实现

class Solution {
    public List> levelOrder(TreeNode root) {
        if(root == null){
            return new ArrayList<>();
    }
    Queue queue = new LinkedList<>();
    List> res = new ArrayList<>();

    queue.add(root);
    while(!queue.isEmpty()){
        int k = queue.size();
        List cur = new ArrayList<>();
        for(int i = 0; i < k; i++){
            TreeNode t = queue.poll();
            cur.add(t.val);
            if(t.left != null) queue.add(t.left);
            if(t.right != null) queue.add(t.right);
        }
        res.add(cur);
    }
    return res;
}
}

测试结果

Leetcode-每日一题【剑指 Offer 32 - II. 从上到下打印二叉树 II】_第1张图片

 

你可能感兴趣的:(算法每日一题,leetcode,算法,职场和发展,java,数据结构)