在计算机科学中,广度优先遍历(BFS)和深度优先遍历(DFS)是两种常用的图或树的遍历算法,用于按特定顺序访问数据结构中的所有节点。
1. 广度优先遍历(Breadth-First Search, BFS)
- 核心思想:从起始节点开始,先访问该节点的所有直接相邻节点(同层节点),再按同样顺序访问这些相邻节点的相邻节点(下一层节点),以此类推,直到所有节点被访问。
- 特点:按 “层次” 顺序遍历,先近后远,类似 “水波扩散”。
- 依赖的数据结构:队列(Queue)
利用队列的 “先进先出” 特性,确保先访问的节点其相邻节点也先被处理。
2. 深度优先遍历(Depth-First Search, DFS)
- 核心思想:从起始节点开始,沿着一条路径尽可能深入地访问,直到无法继续(到达叶子节点或已访问节点),再回溯到上一节点,选择另一条未探索的路径继续深入。
- 特点:优先探索深度,类似 “走迷宫” 时一条路走到头再回头。
- 依赖的数据结构:栈(Stack) 或递归
- 栈:手动用栈存储待访问节点,利用 “后进先出” 特性实现回溯。
- 递归:函数调用栈本质上就是栈结构,递归实现更简洁(隐式使用栈)。
示例对比
假设有如下树结构:
plaintext
A
/ \
B C
/ \ \
D E F
- BFS 遍历顺序:A → B → C → D → E → F(先访问 A 的同层节点 B、C,再访问 B 的子节点 D、E 和 C 的子节点 F)。
- DFS 遍历顺序(以先左后右为例):A → B → D → E → C → F(先深入 A 的左子树 B,再深入 B 的左子树 D,回溯后访问 E,再回溯到 A 的右子树 C,最后访问 F)。
总结
遍历方式 | 核心思想 | 数据结构 | 典型应用场景 |
---|---|---|---|
BFS | 按层次逐层访问 | 队列 | 最短路径(无权图)、层次遍历等 |
DFS | 深度优先,回溯探索 | 栈 / 递归 | 拓扑排序、连通性分析、迷宫求解等 |