DFS与BFS的区别
只有DFS不可以找到最短路径吗
DFS当然也可以找到最短路径,但是时间复杂度也是O(n),但是实际上比BFS低效的很多,DFS是依靠递归的堆栈记录走过的路径的,要找到路径必须把二叉树中的所有叉都走完,然后才可以找出最短路径,但是BFS是一步步起头并进的,可以在没有遍历完整棵树的情况下就可以找出最短路径,这其实就是层序遍历,形象的来说DFS是线,BFS是面,BFS是集体行动,DFS是线
BFS与DFS的使用场景
BFS虽然可以找到最短距离但是空间复杂度高,而DFS的空间复杂度较低
还看刚才我们处理的二叉树的例子,假设给你的这颗二叉树是满二叉树,节点数量为N,对于DFS算法来说,空间复杂度无非就是递归堆栈,在最坏的情况下顶多就是数的高度O(logN),但是对于BFS算法,队列中每次都会存储二叉树一层的节点,这样最坏的情况空间复杂度就是数最小层节点的数量,也就是N/2,用Big O 表示的话就是O(N)
由此来看BFS还是有代价的,一般来是在找最短路径的时候使用BFS,其他情况使用DFS多一些,因为简单