[LeetCode]剑指 Offer 32 - I. 从上到下打印二叉树

Posted Spring-_-Bear

tags:

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

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

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

    3
   / \\
  9  20
    /  \\
   15   7

返回:

[3,9,20,15,7]

提示:

  • 节点总数 <= 1000

题解:

算法流程:

  1. 特例处理: 当树的根节点为空,则直接返回空列表 [] ;
  2. 初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root] ;
  3. BFS 循环: 当队列 queue 为空时跳出;
    • 出队: 队首元素出队,记为 node;
    • 打印: 将 node.val 添加至列表 tmp 尾部;
    • 添加子节点: 若 node 的左(右)子节点不为空,则将左(右)子节点加入队列 queue ;
  4. 返回值: 返回打印结果列表 res 即可。
	/**
     * 剑指 Offer 32 - I. 从上到下打印二叉树
     */
    public int[] levelOrder(TreeNode root) 
        if (root == null) 
            return new int[0];
        
        // 树的层次遍历即广度优先遍历 BFS,优先想到队列
        List<Integer> res = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);

        while (!queue.isEmpty()) 
            TreeNode node = queue.poll();
            res.add(node.val);

            // 将当前结点的左、右孩子加入到队尾
            if (node.left != null) 
                queue.offer(node.left);
            
            if (node.right != null) 
                queue.offer(node.right);
            
        

        int[] result = new int[res.size()];
        for (int i = 0; i < result.length; i++) 
            result[i] = res.get(i);
        
        return result;
    

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof

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

leetcode剑指 Offer 66. 构建乘积数组

LeetCode 剑指Offer 15[位运算] 二进制中1的个数 HERODING的LeetCode之路

LeetCode1482. 制作 m 束花所需的最少天数 / 剑指 Offer 32 . 从上到下打印二叉树I/II/III

LeetCode剑指 Offer II 069. 山峰数组的顶部(C++)

LeetCode剑指 Offer(27)

剑指Offer32,从上到下打印二叉树