JZ32 - I. 从上到下打印二叉树

40 阅读1分钟

leetcode.cn/problems/co…

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

 

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

3

/
9 20 /
15 7 返回:

[3,9,20,15,7]  

提示:

节点总数 <= 1000

解题思路:

  • 题目要求的二叉树的 从上至下 打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)。
  • BFS 通常借助 队列 的先入先出特性来实现。

image.png

算法流程:

image.png

复杂度分析:

时间复杂度 O(N) : N 为二叉树的节点数量,即 BFS 需循环 N 次。

空间复杂度 O(N) : 最差情况下,即当树为平衡二叉树时,最多有 N/2 个树节点同时在 queue 中,使用 O(N) 大小的额外空间。

代码

class Solution {
    public int[] levelOrder(TreeNode root) {
        if (root == null) {
            return new int[0];
        }
        Queue<TreeNode> queue = new ArrayDeque<>();
        queue.offer(root);
        List<Integer> list = new ArrayList<>();
        while (!queue.isEmpty()) {
            int levelSize = queue.size();
            for (int i = 0; i < levelSize; i++) {
                TreeNode cur = queue.poll();
                list.add(cur.val);
                if (cur.left != null) {
                    queue.offer(cur.left);
                }
                if (cur.right != null) {
                    queue.offer(cur.right);
                }
            }
        }
        int[] result = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }
        return result;
    }
}