【LeetCode】102 - 二叉树的层序遍历

题目描述

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

解题思路

使用 BFS(广度优先搜索)的思想,维护当前层的所有节点,逐层处理:

  1. 将根节点加入当前层节点列表
  2. 遍历当前层所有节点,收集它们的值
  3. 收集当前层所有节点的子节点作为下一层
  4. 重复步骤2-3直到没有下一层

核心代码

java 复制代码
public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> result = new ArrayList<>();
    if (root == null) {
        return result;
    }

    List<TreeNode> currentRowNodeList = new ArrayList<>();
    currentRowNodeList.add(root);

    while (true) {
        // 收集当前层的值
        List<Integer> currentRowValList = new ArrayList<>();
        for (TreeNode node : currentRowNodeList) {
            currentRowValList.add(node.val);
        }
        result.add(currentRowValList);

        // 收集下一层节点
        List<TreeNode> nextNodeList = new ArrayList<>();
        for (TreeNode treeNode : currentRowNodeList) {
            if (treeNode.left != null) {
                nextNodeList.add(treeNode.left);
            }
            if (treeNode.right != null) {
                nextNodeList.add(treeNode.right);
            }
        }

        if (nextNodeList.isEmpty()) {
            break;
        }
        currentRowNodeList = nextNodeList;
    }
    return result;
}

复杂度分析

  • 时间复杂度: O(n),n 为二叉树节点数,每个节点访问一次
  • 空间复杂度: O(n),最坏情况下需要存储一层的所有节点

示例验证

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

输出:[[3],[9,20],[15,7]]

算法按层级正确遍历,符合预期结果。