链表:
遍历:
BFS 和 DFS 本质上都是遍历,所以只要是需要遍历的算法,理论上都可以使用 DFS 或者 BFS。它们各自的特点和适用场景如下:
1、BFS 由于是水波纹式的扩散,它可以用于一些求解最短路径以及最优化问题,或者是可以用贪心算法解决的问题上,例如第 126 题、第 127 题 单词接龙,第 207 题、第 210 题:课程表,第 279 题:完全平方数,第 994 题:腐烂的橘子。
2、DFS 的基本思想也很简单,就是一条道走到底,只要前面有路就一直向前走,不撞南墙不回头。很多时候走迷宫就是这么走的。
DFS 如果用于搜索状态空间,就是大名鼎鼎的回溯搜索算法,它厉害的地方在于,可以使用一个状态变量去搜索所有的状态空间,这一点是节约空间的。我们可以想象用一根绳子,在遍历的时候变长变短,遍历的同时保存下来我们需要的那个状态。
BFS 就做不到,BFS 为了遍历就需要保存全部的状态,对于空间来说是个巨大的消耗。
回溯算法
的例题我有总结:在第 46 题的 题解 的最后。