剑指[32]-由上至下打印二叉树

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指[32]-由上至下打印二叉树相关的知识,希望对你有一定的参考价值。

题目来源:剑指 Offer 32 - I. 从上到下打印二叉树

题目描述

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

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

    3
   / \\
  9  20
    /  \\
   15   7
返回:

[3,9,20,15,7]

提示:
节点总数 <= 1000
  • 先排除空树的情况,直接返回空数组;
  • 根据队列可以先入先出的结构,创建队列时就把二叉树的根结点存入;
  • 在队列不为空的前提下,就把队列的头部元素出队;存入一个集合中;这时还要判断刚才出队的元素是否有左子树/右子树;有的话左右子树就依次从队尾入队;
  • 最终所有元素都顺利出队后,考虑按照集合的实际元素个数创建数组,将集合中的元素按顺序向数组存入一份;
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

public class Solution {
    public int[] levelOrder(TreeNode root) {
        //把二叉树的元素一个个放入队列;然后存入集合;最后再转为数组;
        if(root == null) return new int[0];
        //创建一个队列(先入先出)提前就把根结点存入了;一个集合;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        List<Integer> list = new ArrayList<>();
        //只要队列不为空,就操作;
        while (!queue.isEmpty()){
            //里面的元素从队首先出来;存入集合;
            TreeNode poll = queue.poll();
            list.add(poll.val);
            //看这个节点是否有左右子树,有的话加进来;
            if(poll.left!=null) queue.add(poll.left);
            if(poll.right!=null) queue.add(poll.right);
        }

        //最后要返回的数组;
        int[] res = new int[list.size()];
        //把集合元素存到数组;
        for (int i = 0; i < res.length; i++) {
            res[i] = list.get(i);
        }

        return res;
    }
}

以上是关于剑指[32]-由上至下打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章

剑指[32]-由上至下打印二叉树

剑指offer32-1,从上到下打印二叉树

剑指offer32-III从上到下打印二叉树

剑指 Offer 32 从上到下打印二叉树IIIIII

剑指 Offer 32 - III. 从上到下打印二叉树 III(java解题)

剑指Offer面试题32 - I. 从上到下打印二叉树