二叉树的先序ABDGHEIJCF中序GDHBIEJAFC后序遍历GHDIJEBCFA

中级--软件设计师模拟试题题库
本试题来自:(2014年中级--软件设计师模拟试题,)若二叉树的先序遍历序列为ABDECF,中序遍历序列为DBEAFC,则其后序遍历序列为 (11) 。
D.DEBFCA正确答案:有, 或者 答案解析:有,
您可能感兴趣的试题
单项选择题:()在FTP中,控制连接是由______主动建立的。
A.服务器端
C.操作系统
D.服务提供商答案:有,答案解析:有,单项选择题:()设某算法的计算时间可用递推关系式T(n)=2T(n/2)+n表示,则该算法的时间复杂度。为______。
B.O(nlgn)
D.O(n2)答案:有,答案解析:有,
中级--软件设计师模拟试题最新试卷
中级--软件设计师模拟试题热门试卷二叉树的先序、中序和后序序列 请构造出该二叉树_百度知道
二叉树的先序、中序和后序序列 请构造出该二叉树
已知一棵二叉树的先序、中序和后序序列如下,其中各有一部分未给出其值,请构造出该二叉树先序序列 :A _ C D E F_
_ J 中序序列 :C
_ E D A _ G F I _
后序序列 :C _ _ B H G J I _ _
关键是想看过程
提问者采纳
先序的第一个为二叉树树根A,因此后序的最后一个也是A回到中序,以A为根划分,左子树有4个结点,右子树有5个结点现在看后序:前4个最后的是B,因此先序的第二个是B,并且中序的第二个也是B简化如下:先序序列 :A B C D E F_
_ J 中序序列 :C B E D A _ G F I _
后序序列 :C _ _ B H G J I _ A回到先序,A后面连续4个为左子树的先序,因此后面的F就是右子树的根因此后序的倒数第2个就是F再利用先序的DE和中序的ED可以得到后序为ED于是再次简化为:先序序列 :A B C D E F _ H _ J 中序序列 :C B E D A _ G F I _
后序序列 :C E D B H G J I F A现在来看右子树:已知右子树的根为F从中序可知,F有左右子树,且左右均为2个结点,从后序序列可知其前的I就是右子树的根,因此,先序J前面的就是I,并且中序最后的就是J剩下的就可以补充完整了(其实用二叉树的遍历序列也可硬性推导出)最后结果是:先序序列 :A B C D E F G H I J 中序序列 :C B E D A H G F I J
后序序列 :C E D B H G J I F A
提问者评价
其他类似问题
二叉树的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁二叉树的已知后序中序求先序算法
二叉树的已知后序中序求先序算法
要用C语言函数,且程序中要有算法 最好有解释 跪求!!!
/* 树中已知中序和后序求先序。&& &如中序为:bdac 后序为:dbca&& &则程序可以求出先序为:abdc 。此种题型为数据结构常考题型。算法思想:后序遍历树的规则为左右中,则说明最后一个元素必为树的根节点,比如上例中的a就为根节点,由于中序遍历为:左中右,再根据根节点a,我们就可以知道,左子树包含元素为:db,右子树包含元素:c,再把后序进行分解为db和c(根被消去了),然后递归的进行左子树的求解(左子树的中序为:db,后序为:db),递归的进行右子树的求解(即右子树的中序为:c,后序为:c)。如此递归到没有左右子树为止。表达不很清楚,希望自己实践理解。*/#include &stdio.h&#include&string.h&int find(char c,char A[],int s,int e) /* 找出中序中根的位置。 */{for(i=s;i&=e;i++)&& &if(A[i]==c)}/* 其中pro[]表示后序,pro_s为后序的起始位置,pro_e为后序的终止位置。 *//* 其中in[]表示中序,in_s为中序的起始位置,in_e为中序的终止位置。 *//* pernum()求出pro[pro_s~pro_e]、in[in_s~in_e]构成的先序序列。 */void pernum(char pro[],int pro_s,int pro_e,char in[],int in_s,int in_e){if(in_s&in_e) & & & & & & & /* 非法子树,完成。 */if(in_s==in_e){printf("%c",in[in_s]); /* 子树子仅为一个节点时直接输出并完成。 */&& & & & & & & &&& & & & & & & &}c=pro[pro_e]; & & & & & & & & & & & & /* c储存根节点。 */printf("%c",c); & & & & & & & & & & & /* 根节点输出。 */k=find(c,in,in_s,in_e); & & & & & & & /* 在中序中找出根节点的位置。 */pernum(pro,pro_s,pro_s+k-1-in_s,in,in_s,k-1); /* 递归求解分割的左子树。 */pernum(pro,pro_s+k-in_s,pro_e-1,in,k+1,in_e); /* 递归求解分割的右子树。 */}int main(){char in[]="debac";char pro[]="ebcad";printf("The result:");pernum(pro,0,strlen(in)-1,in,0,strlen(pro)-1);return 0;}
相关知识等待您来回答
编程领域专家写出下列二叉树的先序、中序、后序序列_百度知道
提问者采纳
嗯,这个问题我以前回答过了凑合着看吧很显然你还不懂的遍历一棵二叉树的原理当你拿到一棵二叉树,无论它的形状如何的千奇百怪我们都可以将它按照如下的方式划分
\左子树
右子树一棵有很多个节点的二叉树可以划分为以上的形式也可以这么理解,只要是按以上形式组合的都可以称为是二叉树一个仅仅只有根节点的二叉树也可以划分成以上的形式,只不过他的左右子树都为空罢了所以,我们发现,二叉树的定义其实是一个递归定义的过程大的二叉树是由小的二叉树构建而成的所以,当我们考虑要遍历一棵二叉树时也是首选递归的遍历遍历二叉树它的基本思想是先按照上面的形式把整棵二叉树划分为3部分哪么接下来的工作就很简单了我们只需要将这3部分都遍历一遍就可以了(这里用到了分而治之的思想)而对于这3部分来说根节点的遍历无疑是最方便的,直接访问就ok了而对于左右子树呢?我们不难发现,左右子树其实分别成为了两棵完整的树他们拥有各自独立的根节点,左子树和右子树对他们的遍历,很显然应该与刚才的遍历方法一致便可(如果上面的都理解了,那么这个题就是小菜一碟了,如果觉得无法理解,可以按照下面的方法自己多分解几棵树)对于这个题目,中序遍历这可二叉树先看根节点
\左子树
右子树我们应该先遍历左子树也就是下面这棵树
5对于这棵树在进行中序遍历我们应先遍历她的左子树他只有一个根节点4,左右子树都为空哪么遍历这个只有一个根节点的二叉树先访问她的左子树,为空返回访问该树的根节点4在访问右子树也为空此时,这棵树已经被完全的遍历了我们需要返回上一层也就是
5这棵树此时,她的左子树已经被访问完毕根据中序遍历的规则需要访问此树的根节点2此时的访问顺序是4-2访问了根节点在访问右子树只有一个根节点的5(具体过程看4的访问)5访问完毕也就意味着
5这棵树已经访问完了需要返回上一层也就是1为根的树此时这棵树的左子树已经访问完毕此时访问的顺序是4-2-5应该没有问题接下来访问根节点1在访问右子树
7是不是觉得似曾相识???她的访问应该跟
5一致哪么最终遍历的顺序也出来了4-2-5-1-6-3-7-----------------------------花了10多分钟希望对你有所帮助顺便自己也复习下呵呵
提问者评价
其他类似问题
二叉树的相关知识
其他2条回答
先序:1245367中序:4251637后序:4526731
先序:1245367中序:4251637后序:4526731
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁二叉树中,已知先序遍历为EBADCFHGIKJ,中序为ABCDEFGHIJK,画出二叉树,并写出后序。
二叉树中,已知先序遍历为EBADCFHGIKJ,中序为ABCDEFGHIJK,画出二叉树,并写出后序。
思路:先序求根节点,中序判断左右子树,
答案:
后续:A C D B G J K I H F E
其他回答 (1)
由先序知:E为根节点,再由中序知:ABCD在根节点(E)的左边,FGHIJK在根节点(E)的右边。
1、对根节点左边的ABCD进行整理,由先序知:B为左一层根节点,由中序知:B(A,CD)
2、对FGHIJK整理得:F(0,GHIJK)
。。。依些类推。。。可得解。
可得解E(B(A,D(C,0)),F(0,H(G,I(0,K(J,0))))
相关知识等待您来回答
编程领域专家}

我要回帖

更多关于 已知前序中序求后序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信