DFS:深度优先遍历(Depth First Search)
BFS:广度优先遍历(Breath First Search)
流程区别:
DFS侧重于深度,即在搜索解空间时会搜索到最后一层,当达到最后一层时发现解不可用会返回上层进行另外一个方向的深层搜索。
而BFS则是侧重广度,即在搜索时会将该层的所有下一层结果计算出来,然后才进入下一层进行重复操作,类似于层次遍历。
DFS | BFS | |
遍历优先级 | 子节点>兄弟姐妹节点访问 | 兄弟姐妹节点>子节点访问 |
实现方式 | 堆栈数据结构 | 队列数据结构 |
内存占用 | 需要更少内存 | 需要更多内存 |
DFS:
- 利用栈实现,将栈头放入栈
- 从源节点开始把节点按照深度放入栈,然后弹出
- 每弹出一个点,把该节点下一个没有进过栈的邻接点放入栈
- 直到栈为空
BFS:
- 利用队列实现,将队头放入队列
- 从源节点开始依次按照宽度进队列,然后弹出
- 每弹出一个节点,就把该节点所有没有进过队列的邻接点放入队列
- 直到队列为空