树的 深度优先搜索(DFS, Depth-First Search) 和 先序遍历(Pre-order Traversal)在访问顺序上非常相似,甚至在二叉树中,先序遍历 就是一种 深度优先搜索 的实现方式之一。
不过从广义上来说,深度优先搜索 包含以下几种遍历方式:
遍历名称 | 访问顺序 | 是否属于 DFS |
---|---|---|
先序遍历 (Pre-order) | 根 -> 左子树 -> 右子树 | 是 |
中序遍历 (In-order) | 左子树 -> 根 -> 右子树 | 是 |
后序遍历 (Post-order) | 左子树 -> 右子树 -> 根 | 是 |
因此,DFS 实际上包括:
- 先序遍历
- 中序遍历
- 后序遍历
而与 DFS 相对的是 广度优先搜索(BFS, Breadth-First Search),也称为 层序遍历(Level-order Traversal)。
总结:
- 树的深度优先搜索(DFS)和先序遍历的顺序最像。
- 但 DFS 的泛指还包括中序和后序遍历等所有"先一条路走到黑"的遍历方式。
- 广度优先搜索(BFS) 和 层序遍历 是另一类遍历方式,按层访问节点。