1. N叉树层序遍历问题解析
N叉树层序遍历是算法面试中的经典问题,也是理解广度优先搜索(BFS)的绝佳案例。与二叉树不同,N叉树的每个节点可以有多个子节点,这使得遍历过程需要稍作调整。
1.1 问题核心理解
层序遍历要求我们按层级从上到下、每层从左到右输出节点值。对于给定的N叉树:
- 第一层只包含根节点
- 第二层包含根节点的所有子节点
- 第三层包含第二层所有节点的子节点
- 以此类推...
关键点在于如何准确地区分不同层级的节点。这与二叉树的层序遍历思路一致,只是处理子节点时需要遍历children列表而非固定的left/right指针。
1.2 输入输出分析
题目给出的序列化格式需要注意:
- 使用null分隔不同层级的节点
- 每个节点的子节点列表在序列化时会被展平
例如示例1的输入:
code复制[1,null,3,2,4,null,5,6]
表示:
- 根节点1
- 第二层节点3,2,4(都是1的子节点)
- 第三层节点5,6(5是3的子节点,6是4的子节点)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 层序遍历实现详解
2.1 队列的选择与初始化
我们使用双端队列(deque)而非普通列表(list)来实现队列,因为:
- deque的popleft()操作是O(1)时间复杂度
- list的pop(0)操作是O(n)时间复杂度
初始化时,队列只包含根节点:
python复制queue = deque([root])
2.2 层级处理的核心逻辑
每次处理一个完整的层级:
- 获取当前队列长度(即当前层节点数)
- 处理该长度的所有节点
- 将这些节点的子节点加入队列
python复制while queue:
level = []
level_size = len(queue) # 关键:记录当前层节点数
for _ in range(level_size):
node = queue.popleft()
level.append(node.val)
# 将所有子节点加入队列
for child in node.children:
queue.append(child)
