1. 二叉树层序遍历的核心概念
层序遍历(Level Order Traversal)是二叉树最基础的遍历方式之一,也是面试和实际工程中最常考察的算法类型。与先序、中序、后序遍历不同,层序遍历采用广度优先(BFS)的策略,按照树的层级结构从上到下、从左到右依次访问每个节点。
这种遍历方式之所以重要,是因为它直观反映了二叉树的物理结构。想象一下公司组织架构图——层序遍历就像是从CEO开始,逐层向下查看每个部门的经理,再到普通员工,这种"层级式扫描"能帮助我们快速把握整体结构。
在实际开发中,层序遍历常用于:
- 打印树形结构(如文件目录展示)
- 计算二叉树的最大/最小宽度
- 寻找特定层级的节点(如二叉树最右侧节点)
- 序列化/反序列化二叉树结构
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 层序遍历的标准实现方案
2.1 基于队列的经典解法
层序遍历最经典的实现方式是使用队列(Queue)数据结构。其核心思想是:
- 将根节点入队
- 当队列不为空时循环:
a. 记录当前队列长度(即当前层节点数)
b. 依次出队该长度的节点并处理
c. 将每个出队节点的非空子节点入队
python复制from collections import deque
def levelOrder(root):
if not root: return []
queue = deque([root])
result = []
while queue:
level_size = len(queue)
current_level = []
for _ in range(level_size):
node = queue.popleft()
current_level.append(node.val)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
result.append(current_level)
return result
这个实现有几个关键点需要注意:
- 使用双端队列(deque)而非普通list,因为popleft()操作是O(1)时间复杂度
- 在每层开始前记录队列长度,确保只处理当前层节点
- 子节点入队前必须判空,避免将None加入队列
2.2 时间复杂度分析
该算法的时间复杂度是O(N),其中N是二叉树节点总数。这是因为:
- 每个节点恰好入队一次(O(1))
- 每个节点恰好出队一次(O(1))
- 每个节点被访问一次(O(1))
空间复杂度主要取决于队列的最大长度,最坏情况下(完美二叉树最后一层)是O(N),平均情况下是O(树的宽度)。
3. 层序遍历的变种与应用
3.1 锯齿形层序遍历
有时我们需要"之字形"遍历二叉树,即奇
