图的深度优先搜索法是树的先根遍历的推广,它的基本思想是:从图G的某个顶点v0出发,访问v0,然后选择一个与v0相邻且没被访问过的顶点vi访问,再从vi出发选择一个与vi相邻且未被访问的顶点vj进行访问,依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则退回到已被访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点w,从w出发按同样的方法向前遍历,直到图中所有顶点都被访问。

图的广度优先搜索是树的按层次遍历的推广,它的基本思想是:首先访问初始点vi,并将其标记为已访问过,接着访问vi的所有未被访问过的邻接点vi1,vi2, …, vi t,并均标记已访问过,然后再按照vi1,vi2, …, vi t的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依次类推,直到图中所有和初始点vi有路径相通的顶点都被访问过为止。

二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。

深度优先遍历分为三种:前序,中序,后序。

首先我们知道,前序遍历的规则是:

根结点→左子结点→右子结点
中序遍历是:左子结点→根结点→右子结点
后序遍历是:左子结点→右子结点→根结点

已知某二叉树的前序是abdgcefh,中序dgbaechf,则后序是?
那么,对于一棵二叉树,前序遍历的第一个结点一定是这棵树的根结点,即根结点是a。
在中序遍历的顺序dgbaechf中,以a分成左、右两边,左边是bdg,右边是echf。

所以,这棵树现在可以确定如下:
a
/ \ 
bdg echf

接下来再分别对左子树和右子树进行类似的操作。
对于左子树dgb来说,在前序遍历abdgcefh中找到bdg,证明这子树的根是b,那么现在可以确定的树结构如下:
a
/ \
b echf
/
dg

再看dg,前序遍历中的顺序为dg,所以d是dg这部分子树的根,那么又因为中序遍历的dg顺序也是dg,所以g是右子结点。
即:
a
/ \
b echf
/
d
\
g

现在看echf这部分子树,前序中顺序是cefh,所以子树根结点是c,那么左子结点是e,右子树是hf:
得到:
a
/ \
b c
/ / \
d e hf
\
g

最后只剩下hf部分了,前序遍历中是fh,所以根是f,那么h就是左子结点。
现在得到了整棵树:
a
/ \
b c
/ / \
d e f
\ /
g h

对这棵树再进行后序遍历就行了,结果就是:DGEBHFCA

A
  
      B         C

D        E         F

G          H

二叉树的排序的阅读方式:

转载于:https://www.cnblogs.com/songQQ/archive/2009/10/20/1587126.html

二叉树的深度优先和广度优先遍历相关推荐

  1. java实现二叉树广度优先遍历_二叉树之深度优先和广度优先遍历(Java)

    tree.png 1. 二叉树结构定义 public static class Tree { int data; Tree left; Tree right; public Tree(int data ...

  2. 二叉树?深度优先,广度优先遍历,一篇文章搞定(图解+代码+详细思路)

    欢迎关注微信公众号:简说Python 关注后回复:1024,可以进学习进学习交流群. 这两天和几个朋友组了个互相督促学习群,想着督促一下自己学习,也督促自己的原创输出,其实很多时候都是懒,真不是没有东 ...

  3. 树的基本概念和遍历规则 数据结构和算法 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)

    zsychanpin 博客园 首页 新随笔 联系 订阅 管理 树的基本概念和遍历规则 树的递归定义 树是n(n>0)个结点的有限集,这个集合满足下面条件:       ⑴有且仅有一个结点没有前驱 ...

  4. 【树】二叉树遍历算法(深度优先、广度优先遍历,前序、中序、后序、层次)及Java实现...

    [树]二叉树遍历算法(深度优先.广度优先遍历,前序.中序.后序.层次)及Java实现 目录 一.前序遍历 二.中序遍历 三.后序遍历 四.层次遍历 遍历的作用 二叉树是一种非常重要的数据结构,很多其它 ...

  5. 图的理解:深度优先和广度优先遍历及其 Java 实现

    遍历 图的遍历,所谓遍历,即是对结点的访问.一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: 深度优先遍历 广度优先遍历 深度优先 深度优先遍历,从初始访问结点出发,我们知道 ...

  6. c++ 数据结构 图的应用(实现图的深度优先和广度优先遍历)——以邻接表为存储结构

    数据结构实习--图及应用(图的遍历) 一.问题描述 很多涉及图上操作的算法都是以图的遍历操作为基础的.试写一个程序,演示无向图的遍历操作. 二.基本要求 以邻接表为存储结构,实现连通无向图的深度优先和 ...

  7. P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序。

    P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序. 头文件1:SeqList.h #include<stdio.h>#define M ...

  8. 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)

    二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...

  9. 图的存储以及深度优先以及广度优先遍历

    转载自:http://blog.csdn.net/gamer_gyt/article/details/51498546 一:图的分类 1:无向图 即两个顶点之间没有明确的指向关系,只有一条边相连,例如 ...

最新文章

  1. [Winform]检测exe是否已经运行,并将其置顶
  2. MySQL DDL--MySQL 5.7版本Online DDL操作
  3. 【C++深度剖析教程18】逗号操作符的分析
  4. 【LeetCode笔记】剑指 Offer 56 . 数组中数字出现的次数(Java、位运算)
  5. or函数 java_Java OptionalInt orElseGet()用法及代码示例
  6. S5PV210体系结构与接口05:时钟系统编程
  7. php类的静态属性,php学习之类与对象的类的静态属性
  8. 树莓派安装qq linux,2019年树莓派运行新版原生LinuxQQ?【已更新】
  9. android项目飞机大战,飞机大战android版源代码
  10. vba 读取图片尺寸
  11. 一款拥有漂亮外表的Typecho简洁主题-Scarfskin
  12. java点击按钮隐藏图片6_原生JS实现隐藏显示图片 JS实现点击切换图片效果
  13. python 今日头条 微头条_今日头条微头条范文-头条号的微头条你们都发些什么,该如何写?...
  14. 酞菁铜磺酸(CuPcS),酞青铜相对分子质量|齐岳生物
  15. 计算机会计u8实验报告,用友erp,u8实验总结
  16. 微信小程序如何实现上拉刷新(即分页加载数据)?
  17. C语言数据的输入与输出
  18. 002 计算bonus
  19. 【VTM10.0】帧内之PDPC技术
  20. java多线程:线程同步synchronized(不同步的问题、队列与锁),死锁的产生和解决

热门文章

  1. nimbus java_Java:Swing使用Nimbus皮肤
  2. ios 持续获取定位 高德地图_概述-iOS 定位SDK | 高德地图API
  3. JRebel : java.lang.OutOfMemoryError: PermGen space 异常
  4. c语言左移15位,关于c语言中左移右移运算符的问题
  5. oracle 查看并行数据库,Oracle数据库并行查询出错的解决方法
  6. python数学函数_「分享」关于Python整理的常用数学函数整理
  7. 合肥中学计算机老师招聘,2019年合肥北城中学教师招聘公告
  8. SpringMVC使用AOP
  9. 助力小白常见JS逆向乱杀喂饭教程——Url加密
  10. 字节跳动屡战社交,这次抖音亲自上场了