BFS天然适配层序遍历,因其按层扩散特性:先处理距离起点为1的节点,再处理距离为2的节点,依此类推;在二叉树中即从上到下、从左到右逐层访问,配合队列长度锁定每层范围,精准实现分层输出。

广度优先搜索(BFS)天然适配层序遍历,因为它的核心就是按层扩散:先处理所有距离起点为 1 的节点,再处理距离为 2 的,依此类推。在二叉树中,这正好对应从上到下、从左到右逐层访问节点。
为什么 BFS 能直接做层序遍历
层序遍历要求把同一深度的节点归为一组,而 BFS 使用队列 + 每层固定 size 的技巧,能精准捕获“当前层所有节点”。每次循环前记录队列长度,就等于知道这一层有几个节点,从而避免跨层混入。
关键操作:用 size 锁定当前层范围
不能边出队边入队后直接 push 到结果里——那样会丢失层级结构。必须先拿到当前队列长度,再循环这么多次,确保只处理本层节点:
- 初始化队列,根节点入队
- 当队列非空时:
→ 记录当前 size(即本层节点数)
→ 新建空列表存本层值
→ 循环 size 次:出队一个节点,加入本层列表;将其左右子节点(若存在)入队 - 把本层列表加入最终结果
常见变形与注意事项
层序遍历不只输出值,还可能需要:
- 反向层序:最后把 result 反转,或每次插入到头部
- Z 字形遍历:加个 flag,偶数层正序,奇数层倒序添加
- 带层级信息:在每轮循环中,用当前 step 或 depth 记录层数
- 空节点处理:标准层序不加入 null,但若题目要求保留空位(如序列化),需显式入队 null 并特殊判断
和 DFS 做层序的区别
DFS 也能实现层序,但需额外维护 depth 参数并用哈希表或数组按层索引存储,逻辑更绕、易出错。BFS 是唯一自然、简洁、一次遍历就完成分层的方法——它不是“可以做”,而是“最该用”的解法。


















