深度优先搜索与广度优先搜索

深度优先搜索

https://github.com/Xunzhuo/Algorithm-Guide/blob/master/algorithm/dfs.md

https://www.cnblogs.com/DWVictor/p/10048554.html

广度优先搜索

https://github.com/Xunzhuo/Algorithm-Guide/blob/master/algorithm/bfs.md

第6章 广度优先搜索-(算法图解)

深度与广度的比较

我们假设一个节点衍生出来的相邻节点平均的个数是N个,那么当起点开始搜索的时候,队列有一个节点,当起点拿出来后,把它相邻的节点放进去,那么队列就有N个节点,当下一层的搜索中再加入元素

到队列的时候,节点数达到了N2,你可以想想,一旦N是一个比较大的数的时候,这个树的层次又比较深,那这个队列就得需要很大的内存空间了。

于是广度优先搜索的缺点出来了:在树的层次较深&子节点数较多的情况下,消耗内存十分严重。广度优先搜索适用于节点的子节点数量不多,并且树的层次不会太深的情况

那么深度优先就可以克服这个缺点,因为每次搜的过程,每一层只需维护一个节点。

但回过头想想,广度优先能够找到最短路径,那深度优先能否找到呢?深度优先的方法是一条路走到黑,那显然无法知道这条路是不是最短的,所以你还得继续走别的路去判断是否是最短路?

于是深度优先搜索的缺点也出来了:难以寻找最优解,仅仅只能寻找有解。其优点就是内存消耗小,克服了刚刚说的广度优先搜索的缺点

 

二叉树--前序遍历,中序遍历,后序遍历

DLR--前序遍历(根在前从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 )

LDR--中序遍历(根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面)

LRD--后序遍历(根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面)

 

posted @ 2021-04-17 10:41  弱水三千12138  阅读(257)  评论(0)    收藏  举报