DFS与BFS小结
BFS(广度优先遍历)
- 从根节点开始,沿着树的宽度遍历树的结点,类似二叉树的层次遍历。
- BFS往往需队列来辅助实现,即每一次迭代将符合条件的情况加入队列并从队列取出一个元素,队列的长度可以自己控制,在搜索中对加入队列的元素可以加上标记。
- BFS框架:
起点start加入队列q
while(q != NULL)
{
队列首元素x出队列
对x做所有可能的扩展,得到很多点y
如果y是新的节点,则y入队列
加上其他操作
}
DFS(深度优先遍历)
- 一直往深处走,直到找到解或走不下去为止
- DFS需要栈作为辅助数据结构,DFS从起点开始尽可能深入地进行,每次试图访问一个之前没访问过的点,DFS有回退——即找不到时会回到上一个点。
- 通常使用递归——即使用系统内部的堆栈,当递归层次很深时,DFS会爆栈
- 基本框架:
起点s入堆栈
while(s != NULL)
{
取s的栈顶元素x;
如果x还有没访问的y
访问y,y进栈
否则对s做pop操作,弹出x
}