> 首页 > 生活 > 百科 > 前序遍历中序遍历后序遍历

前序遍历中序遍历后序遍历

来源:网络 作者:佚名 时间:03-24 手机版

前序遍历:首先访问根结点,然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。

中序遍历:中序遍历左子树,然后访问根节点,再中序遍历右子树。

后序遍历:首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。

中序遍历、前序遍历和后序遍历

中序遍历的递归版本是:也就是一路往左走到底,左边走不通了,再往右边走;所以中序遍历遵循的还是DFS

dfs(root.left)

打印节点 root

dfs(root.right)

如下:先走左子树,而且会按照 深度优先遍历 的原则往深处探,走4-3-1-2

https://charlesliuyx.github.io/2018/10/22/%E3%80%90%E7%9B%B4%E8%A7%82%E7%AE%97%E6%B3%95%E3%80%91%E6%A0%91%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/

DFS常规来讲,就是比如先选根,相当于先根遍历,不停地往深处探索,你看下面地前序遍历,从4是不回到2,而是经过2再到5

广度优先遍历很类似层序遍历,唯一的区别是:层序遍历需要标记层数,而广度优先遍历就直接进行下去了;

深度优先遍历:深度优先遍历在二叉树树上的展示就是先根遍历:一路往深处探索,不撞南墙不回头,它就是一种递归;当然DFS也可以通过非递归的形式来实现,因为DFS只是一种思想:深度优先;

树如果有循环了,就变成图了;

树的构造

后根遍历,关键点在于以 i 为分界线 buildTree(1,n);

buildTree(low, i-1);

buildTree(i+1, hi);

后根遍历,不用邻接表

int leftValue = Math.max(0, DFS(root.left));

int rightValue = Math.max(0, DFS(root.right));

选择值大的一边:Math.max(leftValue, rightValue)+root.val;

返回的时候把这个值返回去:maxGain = Math.max(maxGain, leftValue+rightValue+root.val);

先序遍历和后序遍历是什么

1、先序遍历也叫做先根遍历、前序遍历,可记做根左右(二叉树父结点向下先左后右)。

首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。

例如,下图所示二叉树的遍历结果是:ABDECF

2、后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。即:

若二叉树为空则结束返回,

否则:

(1)后序遍历左子树

(2)后序遍历右子树

(3)访问根结点

如右图所示二叉树

后序遍历结果:DEBFCA

已知前序遍历和中序遍历,就能确定后序遍历。

扩展资料:

图的遍历算法主要有两种,

一种是按照深度优先的顺序展开遍历的算法,也就是深度优先遍历;

另一种是按照宽度优先的顺序展开遍历的算法,也就是宽度优先遍历。宽度优先遍历是沿着图的深度遍历图的所有节点,每次遍历都会沿着当前节点的邻接点遍历,直到所有点全部遍历完成。

如果当前节点的所有邻接点都遍历过了,则回溯到上一个节点,重复这一过程一直到已访问从源节点可达的所有节点为止。

如果还存在没有被访问的节点,则选择其中一个节点作为源节点并重复以上过程,直到所有节点都被访问为止。

利用图的深度优先搜索可以获得很多额外的信息,也可以解决很多图论的问题。宽度优先遍历又名广度优先遍历。通过沿着图的宽度遍历图的节点,如果所有节点均被访问,算法随即终止。宽度优先遍历的实现一般需要一个队列来辅助完成。

宽度优先遍历和深度优先遍历一样也是一种盲目的遍历方法。也就是说,宽度遍历算法并不使用经验法则算法, 并不考虑结果的可能地址,只是彻底地遍历整张图,直到找到结果为止。图的遍历问题分为四类:

1、遍历完所有的边而不能有重复,即所谓“欧拉路径问题”(又名一笔画问题);

2、遍历完所有的顶点而没有重复,即所谓“哈密顿路径问题”。

3、遍历完所有的边而可以有重复,即所谓“中国邮递员问题”;

4、遍历完所有的顶点而可以重复,即所谓“旅行推销员问题”。

对于第一和第三类问题已经得到了完满的解决,而第二和第四类问题则只得到了部分解决。第一类问题就是研究所谓的欧拉图的性质,而第二类问题则是研究所谓的哈密顿图的性质。

参考资料来源:百度百科-遍历

参考资料来源:百度百科-后序遍历

参考资料来源:百度百科-先序遍历

树的前序遍历、中序遍历、后序遍历详解

对于当前节点,先输出该节点,然后输出他的左孩子,最后输出他的右孩子。以上图为例,递归的过程如下:

(1):输出 1,接着左孩子;

(2):输出 2,接着左孩子;

(3):输出 4,左孩子为空,再接着右孩子;

(4):输出 6,左孩子为空,再接着右孩子;

(5):输出 7,左右孩子都为空,此时 2 的左子树全部输出,2 的右子树为空,此时 1 的左子树全部输出,接着 1 的右子树;

(6):输出 3,接着左孩子;

(7):输出 5,左右孩子为空,此时 3 的左子树全部输出,3 的右子树为空,至此 1 的右子树全部输出,结束。

对于当前结点,先输出它的左孩子,然后输出该结点,最后输出它的右孩子。以上图为例:

(1):1-->2-->4,4 的左孩子为空,输出 4,接着右孩子;

(2):6 的左孩子为空,输出 6,接着右孩子;

(3):7 的左孩子为空,输出 7,右孩子也为空,此时 2 的左子树全部输出,输出 2,2 的右孩子为空,此时 1 的左子树全部输出,输出 1,接着 1 的右孩子;

(4):3-->5,5 左孩子为空,输出 5,右孩子也为空,此时 3 的左子树全部输出,而 3 的右孩子为空,至此 1 的右子树全部输出,结束。

对于当前结点,先输出它的左孩子,然后输出它的右孩子,最后输出该结点。依旧以上图为例:

(1):1->2->4->6->7,7 无左孩子,也无右孩子,输出 7,此时 6 无左孩子,而 6 的右子树也全部输出,输出 6,此时 4 无左子树,而 4 的右子树全部输出,输出 4,此时 2 的左子树全部输出,且 2 无右子树,输出 2,此时 1 的左子树全部输出,接着转向右子树;

(2):3->5,5 无左孩子,也无右孩子,输出 5,此时 3 的左子树全部输出,且 3 无右孩子,输出 3,此时 1 的右子树全部输出,输出 1,结束。

已知:

前序遍历: GDAFEMHZ

中序遍历: ADEFGHMZ

求后序遍历

首先,要先画出这棵二叉树,怎么画呢?根据上面说的我们一步一步来……

1.先看前序遍历,前序遍历第一个一定是根节点,那么我们可以知道,这棵树的根节点是G,接着,我们看中序遍历中,根节点一定是在中间访问的,那么既然知道了G是根节点,则在中序遍历中找到G的位置,G的左边一定就是这棵树的左子树,G的右边就是这棵树的右子树了。

2.我们根据第一步的分析,大致应该知道左子树节点有:ADEF,右子树的节点有:HMZ。同时,这个也分别是左子树和右子树的中序遍历的序列。

3.在前序遍历遍历完根节点后,接着执行前序遍历左子树,注意,是前序遍历,什么意思?就是把左子树当成一棵独立的树,执行前序遍历,同样先访问左子树的根,由此可以得到,左子树的根是D,第2步我们已经知道左子树是ADEF了,那么在这一步得到左子树的根是D,请看第4步。

4.从第2步得到的中序遍历的节点序列中,找到D,发现D左边只有一个A,说明D的左子树只有一个叶子节点,D的右边呢?我们可以得到D的右子树有EF,再看前序遍历的序列,发现F在前,也就是说,F是先前序遍历访问的,则得到E是F的左子树,只有一个叶子节点。

5.到这里,我们可以得到这棵树的根节点和左子树的结构了。如下图:

6.接着看右子树,在第2步的右子树中序遍历序列中,右子树是HMZ三个节点,那么先看前序遍历的序列,先出现的是M,那么M就是右子树的根节点,刚好,HZ在M的左右,分别是它的左子树和右子树,因此,右子树的结构就出来了:

7.到这里,我们可以得到整棵树的结构:

中序遍历:ADEFGHMZ

后序遍历:AEFDHZMG

1..根据后序遍历的特点(左右中),根节点在结尾,确定G是根节点。根据中序遍历的特点(左中右),确定ADEF组成左子树,HMZ组成右子树。

2.分析左子树。ADEF这四个元素在后序遍历(左右中)中的顺序是AEFD,在中序遍历(左中右)中的顺序是ADEF。根据后序遍历(左右中)的特点确定D是左子树的节点,根据中序遍历(左中右)的特点发现A在D前面,所以A是左子树的左叶子,EF则是左子树的右分枝。

EF在后序(左右中)和中序(左中右)的相对位置是一样的,所以EF关系是左右或者左中,排除左右关系(缺乏节点),所以EF关系是左中。

到此得出左子树的形状

3.分析右子树。HMZ这三个元素在中序遍历(左中右)的顺序是HMZ,在后序遍历(左右中)的顺序是HZM。根据后序遍历(左右中)的特点,M在尾部,即M是右子树的节点。再根据中序遍历(左中右)的特点,确定H(M的前面)是右子树的左叶子,Z(M的后面)是右子树的右叶子。

所以右子树的形状

二叉树是什么,二叉树前序遍历.中序遍历.后序遍历又是什么

树是一种数据结构,二叉树是树的一种。他的结构是,根,左儿子,右儿子。。

前序,中序和后序是树遍历的三种不同形式

前序遍历,也叫先根遍历,遍历的顺序是,根,左子树,右子树

中序遍历,也叫中跟遍历,顺序是

左子树,根,右子树

后序遍历,也叫后跟遍历,遍历顺序,左子树,右子树,根

关于二叉树的前序、中序、后序三种遍历

二叉树中遍历分为三种:前序、中序、后序,是根据根节点的顺序命名的。

例如下图:

该图中,A为根节点,B、C分别为左右节点。前序顺序为ABC(根节点最先,然后是同级先左后右),中序顺序为BAC(先左后根最后右),后序为BCA(先左后右最后根)。

运用整体和部分的思维,很容易就能分析这些遍历方式,举例说明中序遍历的过程,如下表:

相关推荐:

前序遍历中序遍历后序遍历

浅议是什么意思

前沿交叉学科有哪些

车违章扣分40分怎么办

浅议色彩教学的几种训练方法

前照明灯的光学系统包括什么

前置摄像头下面一片模糊怎么回事

浅野学秀在动漫中的出场集数

标签: [db:标签]

声明:《前序遍历中序遍历后序遍历》一文由排行榜大全(佚名 )网友供稿,版权归原作者本人所有,转载请注明出处。如果您对文章有异议,可在反馈入口提交处理!

最近更新

  • 前序遍历中序遍历后序遍历

    前序遍历:首先访问根结点,然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。中序遍历:中序遍...

    百科 日期:2023-03-24

  • 300元左右的VR一体机排行榜

    我们都是喜欢去电影院看影片,因为屏幕大、画面震撼,手机和电视都无法带来电影院那种沉浸式体验。但是近年来VR的不断发展现在已经可以实现让你...

    数码 日期:2023-03-24

  • 浅议是什么意思

    浅议:随意、不作深入地评论。侧重于分析,较理性化。造句:1、大家在一起浅议新闻娱乐化时,每个人都发表了自己的看法。2、高层们总是那么认真工作...

    百科 日期:2023-03-24

  • 2023十佳VR降噪眼镜推荐(400内)

    其实我们想看3D电影不用每次都要花钱去电影院看,只需要一部手机和一副眼镜就能让你享受的到在电影院看3D电影的感觉甚至还要优于电影院的3D电...

    数码 日期:2023-03-24

  • 笔记本电池充不进电怎么解决

    1、软件的问题先进入相关的电源管理软件中,关闭电池保护模式或是勾掉禁止充电的选项,如果硬件没有问题的话,电池就能够充电了。2、硬件本身有问...

    数码 日期:2023-03-24

  • 身临其境十款4k高清vr眼镜

    我的手机 2020/7/21 12:03:00随着科技的不断发展,VR产品也变得越来越成熟。智能手机与VR眼镜相结合,使越来越多人有机会体验VR,VR变得越来越大...

    数码 日期:2023-03-24

  • 前沿交叉学科有哪些

    交叉学科是指不同学科之间相互交叉、融合、渗透而出现的新兴学科。交叉学科可以是自然科学与人文社会科学之间的交叉而形成的新兴学科,也可以...

    百科 日期:2023-03-24

  • 车违章扣分40分怎么办

    1、当执勤民警发现驾驶员的违章行为需记分时,违章40分以上怎么办交警将根么办执勤民警工作由核发该类违章据当时的情况,违章40分以上怎么办交...

    百科 日期:2023-03-24

百科排行榜精选

邮箱不能为空
留下您的宝贵意见