1、深度优先算法

遍历规则:不断地沿着顶点的深度方向遍历。顶点的深度方向是指它的邻接点方向。

最后得出的结果为:ABDECFHG。

Python代码实现的伪代码如下:

2、广度优先算法:

遍历规则:

1)先访问完当前顶点的所有邻接点。(应该看得出广度的意思)

2)先访问顶点的邻接点先于后访问顶点的邻接点被访问。

最后得出的结果为:ABCDEFGH。

Python代码实现的伪代码如下:

3.总结

深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为先序遍历、中序遍历、后序遍历(我们前面使用的是先序遍历)。具体说明如下:

先序遍历:对任一子树,先访问根,然后遍历其左子树,最后遍历其右子树。

中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树。

后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。

广度优先遍历:又叫层次遍历,从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问结点,访问完一层就进入下一层,直到没有结点可以访问为止

4、分析

深度优先搜素算法:不全部保留结点,占用空间少;有回溯操作(即有入栈、出栈操作),运行速度慢。

广度优先搜索算法:保留全部结点,占用空间大; 无回溯操作(即无入栈、出栈操作),运行速度快。

通常深度优先搜索法不全部保留结点,扩展完的结点从数据库中弹出删去,这样,一般在数据库中存储的结点数就是深度值,因此它占用空间较少。

所以,当搜索树的结点较多,用其它方法易产生内存溢出时,深度优先搜索不失为一种有效的求解方法。

广度优先搜索算法,一般需存储产生的所有结点,占用的存储空间要比深度优先搜索大得多,因此,程序设计中,必须考虑溢出和节省内存空间的问题。

但广度优先搜索法一般无回溯操作,即入栈和出栈的操作,所以运行速度比深度优先搜索要快些

深度优先和广度优先算法相关推荐

  1. python爬虫算法深度优先_爬虫课程(四)|深度优先和广度优先算法

    深度优先和广度优先算法在爬取一个整站上经常用到,本课程主要讲解这两个算法的原理以及使用过程. 一.网站的树结构 1.1.一个网站的url结构图 以知乎为例,知乎目前有发现.话题.Live.书店.圆桌. ...

  2. 图的深度优先和广度优先算法(DFS递归与非递归)

    无向图--邻接矩阵的深度优先和广度优先算法实现 测试环境:VS2008(C) [cpp:showcolumns] view plaincopyprint? ·········10········20· ...

  3. 深度优先和广度优先算法(例题)

    在LeetCode上面刷题刷到一道二叉树的题,这道题我认为对学习树的深度优先和广度优先算法有一定的帮助,先来看一下题 这道题是这样的: 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返 ...

  4. 树与二叉树的深度优先与广度优先算法(递归与非递归)

    本博客前面文章已对树与二叉树有过简单的介绍,本文主要是重点介绍有关二叉树的一些具体操作与应用 阅读本文前,可以先参考本博客 各种基本算法实现小结(三)-- 树与二叉树   和  各种基本算法实现小结( ...

  5. 算法之深度优先、广度优先算法

    目录 前言: 搜索算法: 广度优先搜索算法 深度优先搜索算法 问题:如何找出社交网络中某个用户的三度好友关系? 总结: 参考资料: 前言: 图这种数据结构经常用于表示一个社交网络,在社交网络中有一个六 ...

  6. 图的基础知识及深度优先、广度优先算法

    图是一种可以表达复杂结构化信息的基本结构,关于图的例子可以自行百度.首先统一一下图中组成部分的叫法,这里把图中包含的元素叫做顶点,两两元素之间的关系叫做边.有时图中的边会带有更多的信息,比如边的方向, ...

  7. 树型结构的深度优先和广度优先算法

    构造一个树模型 const tree = {val: 'a',children: [{val: 'b',children: [{val: 'd',children: [{val: 'g',childr ...

  8. 无向图—深度优先和广度优先算法极其应用

    首先在这里介绍下Algorithms这个网站第二部分,是Algorithms这本书的在线课程. 另外Coursera上的图上的算法的这个课程也很不错. 图的几种表示方法: 用那种方式(数据结构)表示图 ...

  9. 深度搜索和广度搜索领接表实现_数据结构与算法--图的搜索(深度优先和广度优先)...

    数据结构与算法--图的搜索(深度优先和广度优先) 有时候我们需要系统地检查每一个顶点或者每一条边来获取图的各种性质,为此需要从图的某个顶点出发,访遍图中其余顶点,且使得每一个顶点只被访问一次,这个过程 ...

  10. (造轮子)C 创建队列和图实现广度优先算法(BFS)和深度优先算法(DFS)(数据结构)

    链表.队列和图实现BFS和DFS算法(C+造轮子+详细代码注释) 1.队列的链式存储结构   队列的链式表示称为链队列,它实际上是一个同时带有队头指针和队尾指针的单链表.头指针指向队头节点,尾指针指向 ...

最新文章

  1. 砥砺前行,比特币现金周年国际峰会正式召开
  2. AspNet MVC与T4,我定制的视图模板
  3. flannel源码分析--LookupExtIface
  4. python设计模式10-外观模式
  5. mysql 5.7 导入出错_mysql5.x数据库文件导入mysql5.7数据库出错解决方法
  6. NYOJ113 - 字符串替换
  7. Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
  8. 【转】处理wording的一些参考
  9. matlab红字怎么删除,matlab-系统爱好者
  10. Qt 之 HTTP 请求下载(支持断点续传)
  11. matlab 自写iradon,matlab的radon变换
  12. 英文书信格式——书写款式(转载)
  13. meta分析 2. 固定效应和随机效应
  14. 气压曲线软件 android,GPS气压海拔测量
  15. 自组织是管理者和成员的双向奔赴
  16. 终身学习 思维导图
  17. first meet ot MLIR
  18. 《RocketMQ源码分析》NameServer如何处理Broker的连接
  19. 谷歌拼音输入法-里程碑式的跃进
  20. 微信小程序的布局css部分样式

热门文章

  1. spark GBT算法
  2. mongodb WT_ERROR: non-specific WiredTiger error
  3. linux 极路由救砖,极路由三不死u-boot刷机方法
  4. docker的安装教程以及常用命令(一)
  5. 联通企业专线_上海联通数据专线-企业宽带网
  6. echarts地图数据与世界地图中英文转换
  7. Word中如何删除分隔符?
  8. 走进龙芯3A3000(二)安装Gentoo N64
  9. springboot 使用i18n进行国际化发生乱码问题
  10. 紧急大项目的应付手法