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

题目

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

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

    3
   / \
  9  20
    /  \
   15   7

返回:

[3,9,20,15,7]

提示:

  1. 节点总数 <= 1000

解题思路

1.题目要求我们从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。也就是按照二叉树的层序遍历打印二叉树。

2.我们只需要一个队列即可实现,首先我们判断树是否为空,若为空则返回一个没有元素的数组。然后我们建立一个队列来执行打印操作,再建立一个可变数组来存放遍历后的元素,因为我们不确定所给树的元素的个数,所以需要一个可变数组。

3.下面我们开始遍历,首先我们将根节点入队。然后进入一个while()循环,若队列不为空则将让队列进行出队操作,然后将刚出队的元素保存在可变数组中,再判断此元素是否有左右孩子,若存在左右孩子就将左右孩子入队。之后再次判断队列是否为空。循环往复,直到队列为空,就代表整棵树已经遍历完了。

4.最后我们需要将可变数组中的元素存入一个数组并且返回即可。

举个例子:

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

先让三入队

Leetcode-每日一题【剑指 Offer 32 - I. 从上到下打印二叉树】_第2张图片 queue 不为空,让 3 出队,并且让 3 的左右孩子入队。

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

 queue 不为空让 9 出队,因为 9 没有左右孩子,所以不进行入队操作

Leetcode-每日一题【剑指 Offer 32 - I. 从上到下打印二叉树】_第4张图片 queue 不为空 让 20 出队,并且让 20 的左右孩子入队。

Leetcode-每日一题【剑指 Offer 32 - I. 从上到下打印二叉树】_第5张图片 queue 不为空让 15 出栈,15 没有左右孩子  ,所以不进行入队操作

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

  queue 不为空让 7 出栈,7 没有左右孩子  ,所以不进行入队操作

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

 queue 为空,打印结束。

代码实现

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

        queue.add(root);
        while(!queue.isEmpty()){
            TreeNode cur = queue.poll();
            res.add(cur.val);
            if(cur.left != null) queue.add(cur.left);
            if(cur.right != null) queue.add(cur.right);
        }
        int[] num = new int[res.size()];
        for(int i = 0; i < res.size(); i++){
            num[i] = res.get(i);
        }
        return num;

    }
}

测试结果

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

 

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