C++中二叉树的前序(后序、中序)遍历分别是什么意思?相应的树图怎么看?

作者&投稿:泣李 (若有异议请与网页底部的电邮联系)
C++中如果知道了二叉树的前序和中序遍历,怎么知道后序遍历?有点急~~

知道前序遍历就相当于知道了这棵二叉树的根节点(第一个节点便是)
而知道中序遍历

知道这棵树的根节点
就能知道
这棵树的左子树和右子树的所有节点(在中序遍历中找出根节点,根节点左边的所有节点是左子树,右边的所有节点是右子树)。
再分别把左子树和右子树当做一颗完整的树,按照前面的步骤继续分左子树和右子树。
然后就是重复以上动作来遍历整个一棵树(用递归来做),每当访问完一个子树时就输出本子树的根节点(为了后序遍历……)。
到最后分不出来时(既某个子树只有一个节点),这时就可以输出本节点,并且返回。
比如:前序遍历是:ABCD,中序遍历是:BADC。
首先,能求出此树的根节点是A,其次能知道这棵树的左子树的中序遍历是B。
所以这棵子树的前序遍历是B。
因为只有一个节点
所以输出B
再来看看这棵“大”树的右子树,右子树的中序遍历是DC,对应到前序遍历就是CD,所以这棵右子树的根节点就是C。
这棵右子树的左子树就是D,没有右子树。
所以这棵右子树的左子树的根节点也就是D
因为这课左子树的节点只有D,所以输出D。
返回到整棵树的右子树那一层,右子树的根节点是C,它的左右子树又都遍历完了,所以输出C。
最后退回到整棵树那一层,整棵树的根节点是A,左右子树又都遍历完了。
所以输出A。
一共输出了:BDCA。
这便是后序遍历。

知道前序遍历就相当于知道了这棵二叉树的根节点(第一个节点便是)
而知道中序遍历 又 知道这棵树的根节点 就能知道 这棵树的左子树和右子树的所有节点(在中序遍历中找出根节点,根节点左边的所有节点是左子树,右边的所有节点是右子树)。
再分别把左子树和右子树当做一颗完整的树,按照前面的步骤继续分左子树和右子树。
然后就是重复以上动作来遍历整个一棵树(用递归来做),每当访问完一个子树时就输出本子树的根节点(为了后序遍历……)。
到最后分不出来时(既某个子树只有一个节点),这时就可以输出本节点,并且返回。
比如:前序遍历是:ABCD,中序遍历是:BADC。
首先,能求出此树的根节点是A,其次能知道这棵树的左子树的中序遍历是B。
所以这棵子树的前序遍历是B。
因为只有一个节点
所以输出B
再来看看这棵“大”树的右子树,右子树的中序遍历是DC,对应到前序遍历就是CD,所以这棵右子树的根节点就是C。
这棵右子树的左子树就是D,没有右子树。
所以这棵右子树的左子树的根节点也就是D
因为这课左子树的节点只有D,所以输出D。
返回到整棵树的右子树那一层,右子树的根节点是C,它的左右子树又都遍历完了,所以输出C。
最后退回到整棵树那一层,整棵树的根节点是A,左右子树又都遍历完了。
所以输出A。
一共输出了:BDCA。
这便是后序遍历。

二叉树的遍历是指按照一定次序访问树中所有结点,并且每个节点仅被访问一次的过程。

1、先序遍历(前序)

(1)访问根节点;

(2)先序遍历左子树;

(3)先序遍历右子树。

2、中序遍历

(1)中序遍历左子树;

(2)访问根节点;

(3)中序遍历右子树。

3、后序遍历

(1)后序遍历左子树;

(2)后序遍历右子树‘

(3)访问根节点。

记住访问根结点的时机就可以区分三种遍历方法了。

同时知道一棵二叉树的先序序列和中序序列,或者同时知道中序序列和后序序列,就能确定这棵二叉树的结构。构造算法相信你已经学习过,在任一本介绍数据结构的书上应该也有描述的。由于涉及到算法细节,这里就不细说了。

下面根据你例子中给出的序列来介绍确定二叉树结构的步骤:

(1)后序序列中最后一个为树的根节点,即c为二叉树的根结点;

(2)中序遍历中根节点把序列分为左右子树的中序遍历序列两个部分,在你的例子在右子树没有中序遍历序列(中序遍历序列中c右边没有序列),故可知二叉树的左子树的后序遍历序列为dabe,中序遍历序列为deba;

(3)应用(1)的方法,确定c的左子树的根结点为e,并把以e为根结点的子树的中序遍历序列划分为d(以e为根结点的左子树的中序遍历序列)和ba(以e为根结点的右子树的中序遍历序列)两个部分,后序遍历序列为dab;

(4)应用(1)的方法,可确定e的左结点为b;

(5)应用(1)的方法,可确定e的右结点为a;

(6)最后,可确定a无左结点,右结点为d。

构造的二叉树如图中所示。

那么可获得前序遍历序列为cedba



前序:根、左、右
后序:左、右、根
中序:左、根、右


二叉树知道中序和后序怎么求前序
前序遍历就是先遍历根节点,然后遍历左节点,最后是右节点;中序遍历就是先遍历左节点,然后遍历中间的根节点,最后是右节点;后序遍历就是先遍历左节点,然后遍历是右节点,最后是中间的根节点。二叉树的这三种遍历方法,是按照每颗子树的根节点顺序遍历的。有序树:树中任意节点的 子结点之间有顺序...

二叉树前序中序后序
二叉树前序中序后序如下:①前序遍历的方式是:首先访问根节点,然后访问左子树,最后访问右子树。前序遍历序列:F C A D B E H G M。②中序遍历的方式是:首先访问左子树,接着访问根结点,最后访问右子树。中序遍历序列:A C B D F H E M G。③后序遍历的方式是:首先访问左子树,接...

二叉树前序中序后序
二叉树的遍历主要有3中,前序、中序和后序。很多人经常只记住了名字,但是记不住前序、中序和后序到底是如何遍历的。这里我们只要记住,前序,中序和后序指的是根节点的位置即可,即(根)前序,(根)中序,(根)后序,意思就是根节点在根节点、左节点,右节点这三个节点时遍历的顺序。(根前序...

如何判断二叉树的先序遍历、中序遍历和后序遍历?
2、中根遍历一般指中序遍历,在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回,否则:(1)中序遍历左子树 (2)访问根结点 (3)中序遍历右子树 如右图所示二叉树,中根遍历结果:DBEAFC 3...

二叉树的先序、中序和后序遍历序列有什么特点?
1)若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树。2)若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树。(3)若先序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树。(4)若中序序列与层次遍历序列相同,则或为空树...

二叉树前序中序后序
二叉树前序中序后序 前序遍历 前序遍历是三种遍历顺序中最简单的一种,因为根节点是最先访问的,而我们在访问一个树的时候最先遇到的就是根节点。递归法 递归的方法很容易实现,也很容易理解:我们先访问根节点,然后递归访问左子树,再递归访问右子树,即实现了根->左->右的访问顺序,因为使用的...

二叉树的先序,中序,后序怎么确定
二叉树的先序,中序,后序确定的方法如下:1、根据后序遍历的特点,我们知道后序遍历最后一个结点即为根结点,即根结点为G。2、观察中序遍历ADEFGHMZ。其中root节点G左侧的ADEF必然是r0ot的左子树,G右侧的HMZ必然是root的右子树。3、观察左子树ADEF,左子树的中的根节点必然是大树的root的left...

二叉树中什么是前序、中序、后序?
其实这个顺序就是表示根节点所在的位置,左子树和右子树的顺序是固定的,都是先左后右。所以根结点与左右子树的关系就构成了三种顺序:1. 若在左右子树的前面被访问叫做前序,其顺序为根左右 2. 若在左右子树的中间被访问叫做中序,其顺序为左根右 3. 若在左右子树的后面被访问叫做后序,其顺序为...

二叉树中,什么是前序,中序。后序!
2、若在左右子树的后面被访问叫做后序,其顺序为左右根 3、特点为后续遍历的特点是执行操作时,肯定已经遍历过该节点的左右子节点,故适用于要进行破坏性操作的情况,比如删除所有节点 二叉树是数据结构中常被问到的相关知识点,也是需要了解的一个知识点,可以总结一下二叉树的前序、中序、后序遍历的...

如果一棵二叉树的中序序列和后序序列分别为CDBEAGHFK和DCEBHGKFA,则该...
【答案】:D 本题考查二叉树的遍历和二叉树的一些性质。二叉树是一个结点最多只有两个儿子结点的树,其二叉树遍历有3种形式:(1)前序遍历:首先访问根结点,然后按前序遍历根结点的左子树,再按前序遍历根结点的右子树。(2)中序遍历:首先按中序遍历根结点的左子树,然后访问根结点,再按中序...

萝岗区15554741428: C++中二叉树的前序(后序、中序)遍历分别是什么意思?相应的树图怎么看? -
化衬辣椒: 二叉树的遍历是指按照一定次序访问树中所有结点,并且每个节点仅被访问一次的过程. 1、先序遍历(前序) (1)访问根节点; (2)先序遍历左子树; (3)先序遍历右子树. 2、中序遍历 (1)中序遍历左子树; (2)访问根节点; (3...

萝岗区15554741428: c++二叉树遍历序列咋排的? -
化衬辣椒: 如果我理解的图是正确的话~~~ 前序:ABDGCEHIF 中序:DGBAHEICF 后序:GDBHIEFCA 先序遍历:1. 访问根结点2. 按先序遍历左子树;3. 按先序遍历右子树; 中序遍历:1. 按中序遍历左子树;2. 访问根结点;3. 按中序遍历右子树; 后序遍历:1. 按后序遍历左子树;2. 按后序遍历右子树;3. 访问根结点; 举个例子,拿中序遍历来说吧 第一按中序遍历左子树 左子树是B 再中序遍历B的左子树是D D没有左子树 所以第一个输出是根结点D 再访问右子树输出G B的左子树都输出了 再输出根结点B 再访问右子树 道理就是一样的了~

萝岗区15554741428: 二叉树的前序中序后序遍历访问顺序是怎么回事啊?搞不懂 -
化衬辣椒: 树的遍历的三种情况,是根据左子树、右子树、根这3者的不同访问次序来定义的.根左右(根先访问),则为先序遍历;左根右,则为中序遍历;左右根,则为后序遍历.举例如下:前序遍历结果为:ABC中序遍历结果为:BAC后续遍历结果为:BCA

萝岗区15554741428: C++中如果知道了二叉树的前序和中序遍历,怎么知道后序遍历?有点急~ -
化衬辣椒: 知道前序遍历就相当于知道了这棵二叉树的根节点(第一个节点便是) 而知道中序遍历 又 知道这棵树的根节点 就能知道 这棵树的左子树和右子树的所有节点(在中序遍历中找出根节点,根节点左边的所有节点是左子树,右边的所有节点是右子...

萝岗区15554741428: c++二叉树的构造 -
化衬辣椒: 展开全部//前序的第一个元素就是二叉树根,然后在中序中找出这个元素,中序中这个元素的左边的元素//即左子树,右边的元素即右子树.然后在前序中根据中序找出的左右子树划分出左右子数.然//后在左右子二叉数中继续执行上述操作,直...

萝岗区15554741428: 二叉树的前,后,中序遍历(c,c++,pascal),怎么写? -
化衬辣椒: 手动把树画出来,模拟你的手算过程.核心伪代码:procedure bianli(treejiedian): if 没子树 then write(treejiedian) else begin write(treejiedian); <1> bianli(left); bianli(right); end; 这是先序遍历(如上面<1>行看见根先输出);因为是递归,所以中序后序只需要把<1>和遍历左右根的顺序交换一下.

萝岗区15554741428: 二叉树是什么,二叉树前序遍历.中序遍历.后序遍历又是什么 -
化衬辣椒: 你知不知道什么叫做二叉树?如果你不知道什么是二叉树,那么下面的解释对你没有用.设2叉树,根结点是a,叶结点左b右c 前序:a->b->c http://baike.baidu.com/view/1455146.htm 中序:b->a->c http://baike.baidu.com/view/1455143.htm 后序:b->c->a 复杂的二叉树按照这个规律进行.欢迎访问我的论坛:) http://www.chinesebloger.com 期待您的支持:)

萝岗区15554741428: 求二叉树如何前序、中序、后序遍历
化衬辣椒: 先、中、后都是针对父节点何时被遍历来说的. 先序就是先遍历父节点,再遍历左子节点,再遍历右子节点. 中序先遍历左子节点,第二个遍历父节点,再遍历右子节点. 后序先遍历左子节点,再遍历右子节点,最后遍历根节点. 还不懂的话可以下一个这个: http://download.csdn.net/source/287152

萝岗区15554741428: C++: 某二叉树的中序序列为ABCDEFG,后序序列为BDCAFGE,则该二叉树的先序序列为( -
化衬辣椒: 已知某二叉树的中根遍历序列是ABCDEFG,后根遍历序列是BDCAFGE,则它的先跟遍历序列是:EACBDGF. 首先明确先跟遍历:中左右;中根遍历:左中右;后根遍历:左右中. 1、后根遍历明确根节点是E,中根遍历确定左子树是...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网