层次遍历和先,中,后三个的哪个可以唯一确定二叉树?

作者&投稿:戚咏 (若有异议请与网页底部的电邮联系)
C语言数据机构:由中序遍历和层次遍历能不能唯一确定一颗二叉树?为什么说法不一致哪?~

由中序遍历和层次遍历能够唯一确定一颗二叉树。从下面的算法可知,每一步构造得到的二叉树结果是唯一的。
以下构造部分的答案来自百度知道:
假定树的层次遍历ABCDEFG HIJ中序遍历DBGEHJACIF
两种遍历顺序要结合着分析,才能画出这颗树的图

比如,层次遍历,先访问到A节点,说明A是树的根节点
那么在中序遍历结果里看:
DBGEHJ在A前面,说明这些节点,都在A左子树上
CIF在A的后面,说这些节点,都在A的右子树上
那么,树可以先这样画:
__________A________
________/____\_____
_____DBGEHJ__CIF___

再看层次遍历,A后面是B,说明B是A左子树的根节点
从上图中的先序遍历顺序DBGEHJ中看到:
D在B的前面,说明D在B的左子树上
GEHJ在B的后面,说明它们在B的右子树上
那么,树又可以画成:
_________A________
_______/____\_____
_____B________CIF__
____/__\____________
___D__GEHJ_________


如此循环,直到将整个树都画完全
结果如下:

_____________A_______________
___________/____\_____________
________B_________C__________
______/___\_________\_________
_____D_____E_________F_______
__________/__\_________\______
_________G____H_________I____
_______________\______________
_________________J____________

文件 main.cpp 代码如下:

#include // malloc()等
#include // 标准输入输出头文件,包括EOF(=^Z或F6),NULL等
#include // atoi(),exit()
#include // 数学函数头文件,包括floor(),ceil(),abs()等

#define ClearBiTree DestroyBiTree // 清空二叉树和销毁二叉树的操作一样

typedef struct BiTNode
{
int data; // 结点的值
BiTNode *lchild,*rchild; // 左右孩子指针
}BiTNode,*BiTree;

int Nil=0; // 设整型以0为空
void visit(int e)
{ printf("%d ",e); // 以整型格式输出
}
void InitBiTree(BiTree &T)
{ // 操作结果:构造空二叉树T
T=NULL;
}

void CreateBiTree(BiTree &T)
{ // 算法6.4:按先序次序输入二叉树中结点的值(可为字符型或整型,在主程中定义),
// 构造二叉链表表示的二叉树T。变量Nil表示空(子)树。修改
int number;
scanf("%d",&number); // 输入结点的值
if(number==Nil) // 结点的值为空
T=NULL;
else // 结点的值不为空
{ T=(BiTree)malloc(sizeof(BiTNode)); // 生成根结点
if(!T)
exit(OVERFLOW);

层次遍历和中序遍历肯定是可以唯一确定二叉树的。
层次遍历可以确定二叉树的根,中序遍历可以知道根的左右是否存在子树,这样递推下去肯定可以得到唯一的二叉树。

中,你这问题太奇葩了


什么是先序、中序和后序遍历?
先序:是二叉树遍历中的一种,即先访问根结点,然后遍历左子树,后遍历右子树。遍历左、右子树时,先访问根结点,后遍历左子树,后遍历右子树,如果二叉树为空则返回。中序:是二叉树遍历中的一种,即先遍历左子树,后访问根结点,然后遍历右子树。若二叉树为空则结束返回。后序:是二叉树遍历中的...

先序遍历、中序遍历、后序遍历之间有何关系?
在二叉树中,求后序遍历,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。则该二叉树的后序遍历是DGEBHFCA。

...中序遍历、后序遍历所产生序列中,所有叶子结点先后顺序( )。_百...
遍历就是按照某条路径访问树中每个结点,使每个结点被访问仅且一次。(1)先序遍历(D L R):访问根结点;先序遍历左子树;先序遍历右子树。(2)中序遍历(L D R):中序遍历左子树;访问根结点;中序遍历右子树。(3)后序遍历(L R D):后序遍历左子树;后序遍历右子树;访问根结点。...

写出二叉树的先序遍历、中序遍历、后序遍历。
1、后序遍历左子树 2、后序遍历右子树 3、访问根节点 下面介绍一下例子与方法:1、画树求法:第一步,根据前序遍历的特点,我们知道根结点为G 第二步,观察中序遍历ADEFGHMZ。其中root节点G左侧的ADEF必然是root的左子树,G右侧的HMZ必然是root的右子树。第三步,观察左子树ADEF,左子树的中的...

先序遍历、中序遍历、后序遍历的区别?
先根遍历、中根遍历、后根遍历 先序遍历、中序遍历、后序遍历 是对同一种问题的两种说法。二叉树的先根遍历序列与其对应的二叉树的中序序列相同,仅有一种特例:即该二叉树的各结点仅有右子树,也就是一棵退化了的右偏的线性序列。形如:O \\ O \\ O 对于追问的问题:应选D。树、二叉树两者...

如何判断二叉树的先序遍历、中序遍历和后序遍历?
1、先根遍历一般是先序遍历(Pre-order),按照根左右的顺序沿一定路径经过路径上所有的结点。在二叉树中,先根后左再右。巧记:根左右。首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。例如,下图所示...

树的遍历(先序,中序,后序,层次遍历)
中序遍历:在先序和后序之间,遵循左子树 -> 根节点 -> 右子树的顺序,输出节点为:LBCEDFGIH。后序遍历:递归结束于空节点,顺序为左子树 -> 右子树 -> 根节点,即:LBCEFGDIH。层次遍历:按节点层次逐层输出,如ALCBED,通过队列实现。实际上,遍历结果不仅能帮助我们理解树的结构,还可以反向...

先序遍历和中序遍历的先序遍历序列是什么?
已知某二叉树的中根遍历序列是ABCDEFG,后根遍历序列是BDCAFGE,则它的先跟遍历序列是:EACBDGF。首先明确先跟遍历:中左右;中根遍历:左中右;后根遍历:左右中。1、后根遍历明确根节点是E,中根遍历确定左子树是ABCD,右子树上是FG;2、后序遍历,A是左子树的根,然后在中序里ABCD判断A没有左...

已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉...
【解析】二叉树的遍历有3种:前序、中序和后序。后序遍历首先遍历左子树或左子结点,然后遍历右子树或右子结点,最后访问根结点;中序遍历首先遍历左子树或左子结点,然后访问根结点,最后遍历右子树或右子结点;后序遍历首先访问根结点,然后遍历左子树或左子结点,最后遍历右子树或右子结点。本题...

二叉树的先序、中序和后序遍历序列有什么特点?
【答案】先序遍历二叉树的顺序是“根—左子树—右子树”,中序遍历“左子树—根—右子树”,后序遍历顺序是:“左子树—右子树―根”,根据以上原则,解答如下:1)若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树。2)若中序序列与后序序列相同,则或为空树,或为任一结点至多...

额尔古纳市13578903939: 怎么唯一确定一棵二叉树?给定一颗二叉树的按层次遍历序列和后序遍历序列,可以确定唯一的一颗二叉树吗? -
书沸肝达: 给出中序遍历之后再给一个其他的遍历就能够确定了,前序和后续不能确定.完全可以.例如:先序abdecf,中序dbeafc. 分析思路. 1、先序就是根左右,中序就是左根右.所以在先序中a在前即为根.在中序中找到a,则dbe为其左子树,fc为其右子树. 2、dbe左子树在先序中b在前说明b为根,则中序中d为b左子树,e为b右子树. 3、同理fc在先序中c在前说明c为根,中序中f在c前,说明f为c的左子树. 即得如下图: a / \ b c / \ / d e f

额尔古纳市13578903939: C语言数据机构:由中序遍历和层次遍历能不能唯一确定一颗二叉树?为什么说法不一致哪? -
书沸肝达: 由中序遍历和层次遍历能够唯一确定一颗二叉树.从下面的算法可知,每一步构造得到的二叉树结果是唯一的. 以下构造部分的答案来自: 假定树的层次遍历ABCDEFG HIJ中序遍历DBGEHJACIF 两种遍历顺序要结合着分析,才能画...

额尔古纳市13578903939: 二叉树层次和中序遍历算法 -
书沸肝达: 先序非递归算法 【思路】 假设:T是要遍历树的根指针,若T != NULL 对于非递归算法,引入栈模拟递归工作栈,初始时栈为空. 问题:如何用栈来保存信息,使得在先序遍历过左子树后,能利用栈顶信息获取T的右子树的根指针? 方法1:访...

额尔古纳市13578903939: 树的深度遍历和先序遍历是一回事吗?广度遍历呢? -
书沸肝达: 先序,后序,中序针对二叉树.深度、广度针对普通树. 深度遍历:从树根开始扫描,顶层扫描完了,从一层最左(也可以右)面的结点往下层扫描,直到下层已无结点,这时所有靠最左(右)的结点全部扫描完毕,从树梢往上退一层,看这层旁有无兄弟结点,有的话还是一样从最左(右)边开始扫描,这是个递归概念,利用这一方法来遍历整棵树. 广度遍历:从树根开始扫描,顶层扫描完了,扫描一层的所有结点,扫描二层的所有结点,……,扫描最底层的结点.

额尔古纳市13578903939: 二叉树的三种遍历,先,中,后遍历 -
书沸肝达: 先序就是先遍历根,再遍历左子树,再遍历右子树.例如上图的先序遍历是:ABCDEFGHK中序就是先遍历左子树,再遍历根,再右子树.例如上图的中序遍历是:BDCAEHGKF后序就是先遍历左子...

额尔古纳市13578903939: 二叉树遍历有什么规律吗? -
书沸肝达: 分为前序,中序,后序,以及层次遍历.是以根节点的先后顺序来拍的(层次遍历例外,是先遍历本层所有节点,再进入下层)

额尔古纳市13578903939: C语言根据层次遍历和中序遍历求二叉树的前序遍历和后序遍历.下面有我的建树函数,有注释的. -
书沸肝达: #include"cstdio"#include"vector"#include"cstring"#include"algorithm" using namespace std; const int maxn =30; struct node{ int data; node* lchild; node* rchild; }; int n; int in[maxn]; bool vis[maxn]={false}; vector lev; node* create(vector ...

额尔古纳市13578903939: 二叉树遍历 -
书沸肝达: 首先求二叉树中序遍历是关键.中序遍历(左中右)它可以区分一个树的左右子树,所以它可以跟先序遍历和后序遍历或者层序遍历结合.这道题主要根据层序遍历求出根节点位置,用中序求出左右子树的位置.这样可以画出整个二叉树.

额尔古纳市13578903939: 树 知道中序遍历 层次遍历 求先序遍历 -
书沸肝达: 其实对于知道中序和{先、后、层次}之一求出树结构的基本思路都是一样的,都是根据后一种序列能直接找出根节点,从而将中序划分为两部分,然后再找出各自的根节点. 对于层序12345......而言,1一定是根节点,那么中序可以划分出(...)1(...),(...)1,1(...)三种可能的情况,假设是第一种. 那么23一定分别是左右两颗子树的根,假设再划分出的情况是(...)21(...)3(...). 那么456一定是按顺序是从左往右那三颗子树的根节点. 以此类推.知道了树结构再求先序也不难了吧. 提供思路,具体代码还是自己写比较好,这也是一种锻炼.

额尔古纳市13578903939: 已知二叉树,如图所示,写出二叉树的先根,中根,后根次序遍历序列和层次遍历序列. -
书沸肝达:[答案] 先根 ABDEHICFKG 中根 DBHEIAFKCG 后根 DHIEBKFGCA 层次 ABDECHIFGK

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