1、深度优先算法
遍历规则:沿着顶点的深度方向持续遍历。 顶点的深度方向是指相邻点的方向。
最后得到的结果是ABDECFHG。
Python代码实现的伪代码如下。
2、广度优先算法:
遍历规则:
1 )先访问完当前顶点的所有相邻点。 (应该知道宽度的意思) ) ) ) )。
2 )先访问的顶点的邻接点比后访问的顶点的邻接点先被访问。
最后得到的结果是ABCDEFGH。
Python代码实现的伪代码如下。
3 .总结
深度优先遍历:对于所有可能的分支路径,无法进一步深入,每个节点只能访问一次。 需要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为前序遍历、中序遍历、后序遍历(我们面前使用的是前序遍历)。 具体说明如下。
第一个遍历:首先访问其中一个子树的根,然后遍历其左侧的子树,最后遍历其右侧的子树。
中顺扫描(对于任意一个子树,首先扫描其左侧子树,然后访问根,最后扫描其右侧子树。
后遍历:对于任意一个子树,首先遍历其左侧的子树,然后遍历其右侧的子树,最后访问根。
宽度优先遍历:也称为分层遍历,从上到下依次访问各层,从左到右或从右到左访问节点,然后访问下一层直到节点无法访问
4、分析
深度优先搜索算法:不保留所有节点,占用空间少; 有回溯操作(即堆栈、外堆栈操作),执行速度较慢。
广度优先搜索算法:保留所有节点,占用空间大; 无回溯操作(即无堆栈、外堆栈操作),执行速度快。
通常,深度优先搜索法不保留所有节点,扩展的节点从数据库中通过弹出窗口删除。 这样,由于一般存储在数据库中的节点数是深度值,所以占用空间很小。
因此,在搜索树节点多,其他方法容易发生内存溢出的情况下,深度优先搜索是一种有效的求解方法。
由于宽度优先搜索算法通常需要存储所有生成的节点,并且占用比深度优先搜索大得多的存储区域,因此程序设计中需要考虑溢出和内存区域的节省。
但是,由于宽度优先搜索法一般没有回溯操作,即进入堆栈的操作和进入堆栈的操作,所以执行速度比深度优先搜索快