Skip to content

102.二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000]
  • 1000Node.val1000

解法一(广度优先+队列)

思路分析:

  1. 使用广度优先遍历即可, 结合队列先进先出的特性, 一层一层遍历二叉树;

实现代码

java
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> ans = new ArrayList<>();
        if (root == null) { // 特殊情况判空
            return ans;
        }
        Queue<TreeNode> queue = new ArrayDeque<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            // 获取该层节点的个数
            int size = queue.size();
            List<Integer> level = new ArrayList<>();
            // 遍历当前层节点
            for (int i = 0; i < size; ++ i) {
                TreeNode node = queue.poll();
                level.add(node.val);    // 保存当前层节点值
                // 继续将左右节点加入到队列中
                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
            }
            ans.add(level);
        }
        return ans;
    }
}

运行结果

2024/10/06 17:32:56

解答成功:

执行耗时:1 ms,击败了93.23% 的Java用户

内存消耗:44.16 MB,击败了5.42% 的Java用户

复杂度分析

  • 时间复杂度: O(n), 即遍历每个节点;
  • 空间复杂度: O(n), 需要使用队列来存储节点;