前序A,B,C,D,E,F,G ;中序C,B,D,A,E,G,F,画出该二叉树,给出后序序列

巩固12342022-10-04 11:39:541条回答

已提交,审核后显示!提交回复

共1条回复
ljj_snow 共回答了21个问题 | 采纳率85.7%
应该这样:
A
/
B E
/
C D F
/
G
后序遍历:
CDBGFEA
1年前

相关推荐

请问下题的思路:设中序线索二叉树的类型为TBTNode* InThTree 设计算法,在一棵中序
请问下题的思路:设中序线索二叉树的类型为TBTNode* InThTree 设计算法,在一棵中序
请问下题的思路:
设中序线索二叉树的类型为TBTNode* InThTree
设计算法,在一棵中序线索二叉树中寻找结点t的子树上中序最后一个结点.
谁能理解oo1年前1
88kky 共回答了16个问题 | 采纳率81.3%
一种方法是先求出以节点t为根节点的树的结点个数 设节点个数为n 然后中序遍历的时候 每访问一个数 则访问数+1 一直访问到n则该节点即中序遍历最后一个节点
什么是对称序 二叉树我只知道 中序排列 后序排列 线序排列 对称序是什么个顺序啊
whitehuose1年前2
tbx888 共回答了17个问题 | 采纳率82.4%
先序,又称先根,顺序为:根,左孩子,右孩子.
中序,即中根,又叫对称序.顺序为:左孩子,根,右孩子.
后序,即后根.顺序为:左孩子,右孩子,根.
线序,即层次.按层次遍历.先第一层从左到右,再第二层,继续下去遍历.
二叉树的建立,二叉树的遍历。本实验要求实现以下功能:1.按前序次序建立一颗二叉树,以‘#’表示空。2.中序、后序遍历该二
二叉树的建立,二叉树的遍历。
本实验要求实现以下功能:
1.按前序次序建立一颗二叉树,以‘#’表示空。
2.中序、后序遍历该二叉树,输出遍历序列。
3.求出该二叉树的深度并输出,或求出该二叉树的叶子数目并输出。
[测试数据]:
输入以下字符串,建立二叉树:ABC##DE#G##F###
输出中序遍历序列应为:CBEGDFA
输出后序遍历序列应为:CGEFDBA
输出二叉树的深度应为:5
输出二叉树的叶子数目应为:3
rongju05181年前1
天使皆凡人 共回答了16个问题 | 采纳率87.5%
#include "stdio.h"
//二叉树的练习
typedef struct BiTNode
{
char data; /*结点的数据域*/
struct BiTNode *lchild , *rchild; /*指向左孩子和右孩子*/
} BiTNode , *BiTree;
/*创建一棵二叉树*/
CreatBiTree(BiTree *T)
{
char c;

c = getch();
printf("get = %cn",c);
if(c == ' ')
*T = NULL;
else
{
*T = (BiTNode * )malloc(sizeof(BiTNode)); /*创建根结点*/
(*T)->data = c; /*向根结点中输入数据*/
CreatBiTree(&((*T)->lchild)); /*递归地创建左子树*/
CreatBiTree(&((*T)->rchild)); /*递归地创建右子树*/
}
}
/*访问二叉树结点,输出包含D字符结点位于二叉树中的层数*/
visit(char c,int level)
{
if(c == 'D')
printf("%c is at %d lever of BiTreen",c,level);
}
/*遍历二叉树*/
//先序
PreOrderTraverse(BiTree T,int level)
{
if(T)
{ /*递归结束条件,T为空*/
printf("node: %c, level: %dn",T->data,level);
//visit(T->data,level); /*访问根结点*/
PreOrderTraverse(T->lchild,level+1); /*先序遍历T的左子树*/
PreOrderTraverse(T->rchild,level+1); /*先序遍历T的右子数*/
}
}
//中序
InOrderTraverse(BiTree T,int level)
{
if(T)
{ /*递归结束条件,T为空*/
InOrderTraverse(T->lchild,level+1); /*先序遍历T的左子树*/
printf("node: %c, level: %dn",T->data,level);
InOrderTraverse(T->rchild,level+1); /*先序遍历T的右子数*/
}
}
//后序
PostOrderTraverse(BiTree T,int level)
{
if(T)
{ /*递归结束条件,T为空*/
PostOrderTraverse(T->lchild,level+1); /*先序遍历T的左子树*/
PostOrderTraverse(T->rchild,level+1); /*先序遍历T的右子数*/
printf("node: %c, level: %dn",T->data,level);
}
}
//统计二叉树叶子节点数
int CountLeaf(BiTree T)
{
static int count = 0;
if (T)
{
count = CountLeaf(T->lchild);
if ((T->lchild == NULL) && (T->rchild == NULL))
{
count ++;
}
count = CountLeaf(T->rchild);
}
return count;
}
//求二叉树的深度
int TreeDepth(BiTree T)
{
static int count = 0;

if (T)
{
count++;
count = TreeDepth(T->lchild);
count = TreeDepth(T->rchild);
}
return count;
}
main()
{
int level = 1;
int Node_num = 0,Depth_num = 0;
BiTree T = NULL; /*最开始T指向空*/

CreatBiTree(&T); //创建二叉树,先画出树形图,根据图进行输入创建
printf("n先序遍历:n");
PreOrderTraverse(T,level); //遍历二叉树,找到包含D字符结点位于二叉树中的层数
printf("n中序遍历:n");
InOrderTraverse(T,level); //遍历二叉树,找到包含D字符结点位于二叉树中的层数
printf("n后序遍历:n");
PostOrderTraverse(T,level); //遍历二叉树,找到包含D字符结点位于二叉树中的层数

Node_num = CountLeaf(T);
Depth_num = TreeDepth(T);
printf("nNode_num = %d, Depth_num = %dn",Node_num,Depth_num);
}
已知一棵二叉树的中序序列和后序序列分别为c,b,a,e,d,h,g,j,i,f 和 c,b,e,h,j,i,g,f,d,
已知一棵二叉树的中序序列和后序序列分别为c,b,a,e,d,h,g,j,i,f 和 c,b,e,h,j,i,g,f,d,a
画出这棵二叉树,并写出其前序遍历序列
绿色碎花的窗帘1年前1
阿弥陀佛55226 共回答了14个问题 | 采纳率92.9%
这个问题我答了几次,搜一下就有答案了:
很简单.这也是个递归过程.
知道后序,就能找到“根”,是最后一个节点.
知道“根”节点,就好办了,从中序中把根结点找到,它左边是左子树的中序,
右边是右子树的中序,知道这两子树的中序,就能从后序中,把左子序、右子树
找出来(据中序的左、右子树的结点数).
这样,根节点找出来了,左子数的后序、中序就分离出来了,右子数也分离出来了,
这个问题,就化成两个新树的问题.同样的办法如此,就是递归成两个子树的新问题.
如果用程序,一样用递归就做出来了.
如:后序中最后一个a就是根,从中序就能分出左右子树:
c b及 e d h g j i f 这是中序;
就可从后序分出左右子树:
cb 及 e h j i g f d
这个问题就变成了两个树的同样问题了.
左子树的中序c b,后序 c b
右子树的中序e d h g j i f 后序 e h j i g f d
就可推算出一颗整树 .
你就可用递归的办法写出程序.
已知二叉树的先序序列.中序序列和后序序列分别如下,但其中有一些模糊不清.试构造该二叉树.
已知二叉树的先序序列.中序序列和后序序列分别如下,但其中有一些模糊不清.试构造该二叉树.
先序序列_BC_E_GH
中序序列C_DA_GHF
后序序列_DB_ _FEA
飞跃zz1年前1
yaobin16 共回答了13个问题 | 采纳率84.6%
先序:ABCDEFGH
中序:CBDAEGHF
后序:CDBHGFEA
F
H
G
E
A
D
B
C
这是一棵左旋90度的二叉树
假设一棵二叉树的中序序列为EHFBDACKIGJ,前序序列为ABEFHDCGIKJ.请画出该二叉树.跪求大神解答
袜子671年前0
共回答了个问题 | 采纳率
一棵二叉树的先序、中序、后序序列如下,其中一部 分未标出,请构造出该二叉树.
一棵二叉树的先序、中序、后序序列如下,其中一部 分未标出,请构造出该二叉树.
先序序列 :_ _ C D E _ G H I _ K
中序序列 :C B _ _ F A _ J K I G
后序序列 :_ E F D B _ J I H _ A
looohooo001年前1
小奇奇qq 共回答了21个问题 | 采纳率95.2%
你的先序序列不少元素干嘛打那么多空格,结果是,先序
遍历为:ABCDEFGHIJK 中序遍历为:CBEDFAHJKIG 后续遍历
为:CEFDBKJIHGA.树状结构为:
A
/
B G
/ /
C D H
/
E F I
/
J

K
二叉树前序序列为ABCDEFG,中序序列为DBCAFEG,则后序序列为?
红木湾人1年前1
sanmen2000 共回答了12个问题 | 采纳率100%
gfedcba
已知先序序列:ABCDEFGH,中序序列:CDBAFEHG,画出的二叉树是怎样的?
tinkle_xuy1年前1
ff的光 共回答了18个问题 | 采纳率100%
由先序可知,A是根,于是在中序中可知CDB在作,FEHG在右:
A
/
(CDB) (FEHG)
同理,先序划分成A|BCD|EFGH.在左子树BCD中,因先序可得B是根,右子树EFGH中E是根:
A
/
B E
| |
(CD) (FGH)
在B和B的子孙中,由中序序列CDB,可知CD都在B的左子树上.先C后D,可得C是B的左子节点,D是C的右子节点.同理由FGH在中序序列为FEHG可以推出,F在E的左子树上,HG在右子树上:
A
/
B E
/ /
C F (GH)

D
同CD的判断过程,不难得出G是E右子节点,H是G左子节点:
A
/
B E
/ /
C F G
/
D H
如何建立中序线索二叉树,我调了很长时间了,可是不知道哪里出错了,
如何建立中序线索二叉树,我调了很长时间了,可是不知道哪里出错了,
采用先序法建立一棵二叉树,然后建立这棵二叉树的中序线索二叉树,线索二叉树的描述如下:
每个结点包括5个域,分别存储结点的值、标记位、结点的左右子树指针或者结点的前趋和后继(取决于标记位的值).
如果ltag值为0,表示lchild指向结点的左孩子,如果ltag=1,表示lchild结点指向结点的前驱;如果rtag=0,表示rchild指向结点的右孩子,如果rtag=1,表示rchild指向结点的后继.
要求输入一个先序创建二叉树所需要的先序序列,按照中序方式输出该二叉树所对应的线索二叉树的每个结点,包括它的ltag,data,rtag三个域的值.二叉树的数据域类型为字符型,扩展二叉树的叶子结点用‘#’表示.--------------------------------------------------------------------------------输入样例:
A B # # C D # E # F # # G H # I K # # # #
--------------------------------------------------------------------------------
输出样例:
1 B 1
0 A 0
1 D 0
1 E 0
1 F 1
0 C 0
1 H 0
1 K 1
0 I 1
0 G 1
--------------------------------------------------------------------------------
输入描述:
输入一棵扩展二叉树的先序遍历序列,共用一行,直接输入某二叉树的加了叶子结点的扩展二叉树字符序列,以空格隔开.
--------------------------------------------------------------------------------
输出描述:
输出中序遍历的该二叉树所对应线索二叉树的每个结点,包括它的ltag,data,rtag域,输出格式为每行一个结点,数据之间以空格隔开.
我的代码:#include
using namespace std;
struct Node
{
x05char data;
x05Node *lchild;
x05Node *rchild;
x05int ltag;
x05int rtag;
};
class Tree
{
public:
x05Tree();
x05~Tree(){}
x05Node *Next(Node *p);
x05void Inorder();
private:
x05Node *root;
x05Node *Creat(Node *bt);
x05void ThrBi(Node *bt,Node *pre);
};
Tree::Tree()
{
x05Node *pre;
x05root = Creat(root);
x05pre = NULL;
x05ThrBi(root,pre);
}
Node *Tree::Creat(Node *bt)
{
x05char x;
x05
x05cin >> x;
x05if(x=='#')
x05{
x05x05bt = NULL;
x05}
x05else
x05{
x05x05bt = new Node;
x05x05bt->data = x;
x05x05bt->ltag = 0;
x05x05bt->rtag = 0;
x05x05bt->lchild = Creat(bt->lchild);
x05x05bt->rchild = Creat(bt->rchild);
x05}
x05return bt;
}
void Tree::ThrBi(Node *bt,Node *pre)
{
x05if(bt==NULL)
x05{
x05x05return;
x05}
x05
x05ThrBi(bt->lchild,pre);
x05
x05if(bt->lchild==NULL)
x05{
x05x05bt->ltag = 1;
x05x05bt->lchild = pre;
x05}
x05
x05if(bt->rchild==NULL)
x05{
x05x05bt->rtag = 1;
x05}
x05
x05if((pre!=NULL)&&(pre->rtag==1))
x05{
x05x05pre->rchild = bt;
x05}
x05
x05pre = bt;
x05
x05ThrBi(bt->rchild,pre);
x05
}
Node *Tree::Next(Node *p)
{
x05Node *q;
x05if(p->rtag==1)
x05{
x05x05q = p->rchild;
x05}
x05else
x05{
x05x05q = p->rchild;
x05x05
x05x05while(q->ltag==0)
x05x05{
x05x05x05q = q->lchild;
x05x05}
x05}
x05return q;
}
void Tree::Inorder()
{
x05Node *p;
x05if(root==NULL)
x05{
x05x05return;
x05}
x05else
x05{
x05x05p = root;
x05x05while(p->ltag==0)
x05x05{
x05x05x05p = p->lchild;
x05x05}
x05x05cout ltag
namhyeri1年前1
天使eva 共回答了16个问题 | 采纳率93.8%
麻烦你下个注释,ThrBi是想做什么
建立二叉树的二叉链表表示,实现二叉树的先序、中序、后序和按层次遍历,统计并输出结点个数。
建立二叉树的二叉链表表示,实现二叉树的先序、中序、后序和按层次遍历,统计并输出结点个数。
1)采用二叉链表存储结构建立二叉树,从键盘按先序输入二叉树的结点序列。如,建立如右图所示的二叉树,建立时按先序输入的结点序列为: abc###de#f##g##,其中“#”表示空格字符,用来代表空树。
(2)二叉树的建立、先序遍历、中序遍历、后序遍历均采用递归方式实现。
(3)层序遍历采用非递归方式实现。
(4)利用后序遍历算法统计结点个数。
fhgyjyu1221年前1
海边的阿迪丽娜 共回答了14个问题 | 采纳率85.7%
typedef struct node
{
char data;
struct node *lchild,*rchild;
}bitree;
bitree *root=NULL;
//创建树
bitree *CreateTree(char *sInPut)
{
bitree *root,*s;
bitree *Q[128];
int front,rear;
root=NULL;
front=1;
rear=0;
char temp[128],*p;
memset(temp,0,128);
strcpy(temp,sInPut);
p=temp;
while(strlen(p)>0)
{
s=NULL;
if(*p!='@')
{
s=(bitree*)malloc(sizeof(bitree));
s->data=*p;
s->lchild=NULL;
s->rchild=NULL;
}
rear++;
Q[rear]=s;
if(rear==1)
{
root=s;
}
else
{
if(s && Q[front])
{
if(rear%2==0)
Q[front]->lchild=s;
else
Q[front]->rchild=s;
}
if(rear%2==1) front++;
}
p+=2;
}
return root;
}
//释放树
void freetree(bitree *root)
{
if(root!=NULL)
{
freetree(root->lchild);
freetree(root->rchild);
free(root);
}
}
//前序遍历
void preorder(bitree *root)
{
if(root!=NULL)
{
printf("%ct",root->data);
preorder(root->lchild,sOutPut);
preorder(root->rchild,sOutPut);
}
}
//中序遍历
void inorder(bitree *root)
{
if(root!=NULL)
{
inorder(root->lchild,sOutPut);
printf("%ct",root->data);
inorder(root->rchild,sOutPut);
}
}
//后序遍历
void postorder(bitree *root)
{
if(root!=NULL)
{
postorder(root->lchild,sOutPut);
postorder(root->rchild,sOutPut);
printf("%ct",root->data);
}
}
//层次遍历
void PrintTree(bitree *root)
{
CString sOutPut;
char temp[128];
bitree *Q[128],*s;
int front,rear;
front=0;
rear=0;
sOutPut.Empty();
Q[rear++]=root;
while(rear>front)
{
printf("%ct",Q[front]->data);
sOutPut=temp;
s=Q[front++];
if(s->lchild!=NULL)
Q[rear++]=s->lchild;
if(s->rchild!=NULL)
Q[rear++]=s->rchild;
}
}
//树叶子数
void countleaf(bitree *root,int &count)
{ if(root!=NULL)
{ if((root->lchild==NULL)&&(root->rchild==NULL))
{ count++;
return;
}
countleaf(root->lchild,count);
countleaf(root->rchild,count);
}
}
//树深度
void treedepth(bitree *root,int l,int &h)
{ if(root!=NULL)
{ l=l+1;
if(l>h) h=l;
treedepth(root->lchild,l,h);
treedepth(root->rchild,l,h);
}
}
已知一棵二叉树的中序和前序序列如下,求该二叉树的后序序列,并画出二叉树
已知一棵二叉树的中序和前序序列如下,求该二叉树的后序序列,并画出二叉树
中序序列:c,b,d,e,a,g,I,h,j,f
前序序列:a,b,c,d,e,f,g,h,I,j
_lingling1年前0
共回答了个问题 | 采纳率
1用递归实现二叉树的先序、中序、后序三种遍历。2哈夫曼树问题
1用递归实现二叉树的先序、中序、后序三种遍历。2哈夫曼树问题
1通过调试为下面的二叉树建立二叉链表,并用递归实现二叉树的先序、中序、后序三种遍历。
2[基本要求]:
A:从终端读入字符集大小为n,及n个字符和n个权值,建立哈夫曼树,进行编码并且输出。并将它存于文件hfmtree中。
B:利用已建好的哈夫曼编码文件hfmtree,对键盘输入的正文进行译码。输出字符正文,再输出该文的二进制码。
[测试数据] 用下表中给出的字符集和频度的实际统计数据建立哈夫曼树:
字符 A B C D E F G H I J K L M N
频度 64 13 22 32 103 21 15 47 57 1 5 32 20 57
字符 O P Q R S T U V W X Y Z 空格
频度 63 15 1 48 51 80 23 8 18 1 16 1 168
并实现以下报文的译码和输出:“THIS PROGRAM IS MY FAVORITE”。

还有真爱么1年前1
风之捷 共回答了16个问题 | 采纳率87.5%
//在吗? 我给你。另外我有自己的实验报告。
//里面有递归遍历,有迭代遍历。可以写文件,可以压缩编码。可以读文件。
//你不需要什么功能的话就删去相应的函数就行了。
//希望加分。
#include
#include
#include
#include
using namespace std;
const int maxlen = 10000; //结点最大数目
const int maxlen2 = 260; //字符最大数目,叶节点最大数目
const int maxchar = 260; //字符最大数目
#define INTMAX 10000000; //大数,大于任意一个权值
struct CharSet //程序初始化时保存字符和结点的结构体。
{
char ch;
int weight;
};
struct HaffNode //哈夫曼树结点结构
{
int weight,parent,lchild,rchild;
char ch;
HaffNode() {weight=0; parent=lchild=rchild=-1; ch='n';}
};
struct HaffCode //哈夫曼树字符编码信息结构
{
unsigned int bit; //通过位运算,用一个无符号整形来表示一串二进制编码。
int startb; //记录偏移量。
int weight;
char ch;
HaffCode() { bit=0; startb = -1; weight=0; ch='n';}
HaffCode& operator=(HaffCode & obj) //重载赋值符号
{
bit=obj.bit; startb=obj.startb;
ch=obj.ch; weight=obj.weight;
return *this;
}
};
class HaffmanSystem
{
private:
CharSet cs[maxlen/2]; //保存初始化时的字符和权值信息。
HaffNode hn[maxlen]; //保存哈夫曼树结点信息。
HaffCode hc[maxlen/2]; //保存哈夫曼树字符编码信息。
HaffCode hc2[maxchar]; //索引散列。考虑到字符数少,以字符的十进制数作为下标保存和索引字符编码信息,时间为O(1);
int head; //根结点的数组下标。
int n;
int leafnum; //叶节点个数,字符个数。
public:
HaffmanSystem() {n=head=leafnum=0;}
void Haffman(); //哈夫曼树生成函数。
void InitisLization(); //初始化,调用Haffman();
void Encoding(); //对文件"ToBeTran"进行编码。
void Decoding(); //对文件"CodeFile"译码。
void Print(); //印代码至屏幕。
static void TreePrinting(int pos,int i,int child_flag,HaffmanSystem * p,ofstream & fop);
void TreePrinting(); //输出哈夫曼树图形到屏幕和文件,其中要调用静态实例函数完成递归功能。
void TreeFromFile(); //从文件中获取哈夫曼树。
};
void HaffmanSystem::InitisLization()
{
cout
数据结构问题(求大神指导啊)如果一棵二叉树的先序序列是u1,u2, ,un,中序序列是up1,up2,...upn.试说
数据结构问题(求大神指导啊)
如果一棵二叉树的先序序列是u1,u2, ,un,中序序列是up1,up2,...upn.试说明若任意两个结点数据域的值都不相同,则可以根据两个结点序列将该二叉树构造出来,并给出构造步骤.
jrl9991年前1
xyling10 共回答了20个问题 | 采纳率95%
http://blog.csdn.net/yunzhongguwu005/article/details/9270085
参考这个帖子.
通过先序遍历和中序遍历构造二叉树的问题很常见的.
已知一颗二叉树的先序序列与中序序列,请画出此二叉树:先序序列:ABCDEFGHIJ;中序序列:CBEDAGHFJI
cyangjun1年前1
suoming 共回答了18个问题 | 采纳率83.3%
a
b f
c d g i
e h j
a 的左右孩子结点 分别为 b f
b的左右 c d
c 无孩子
d只有左 e
f左右 g i
g 只有 右 h
i 只有左 j
已知一棵二叉树的先序序列为ABCDEFGHIJ,中序序列为BCDAFEHJIG
已知一棵二叉树的先序序列为ABCDEFGHIJ,中序序列为BCDAFEHJIG
(1)画出这棵二叉树.
(2)写出该树的后序序列
hzhcn2006e1年前1
65165y1hr1t 共回答了17个问题 | 采纳率82.4%
A
B E
C F G
D H
J
I
CDBFJIHGEA
二叉树的先序、中序和后序序列 请构造出该二叉树
二叉树的先序、中序和后序序列 请构造出该二叉树
已知一棵二叉树的先序、中序和后序序列如下,其中各有一部分未给出其值,请构造出该二叉树
先序序列 :A _ C D E F_ H _ J
中序序列 :C _ E D A _ G F I _
后序序列 :C _ _ B H G J I _ _
关键是想看过程
Cindereala1年前1
卧听潮声 共回答了21个问题 | 采纳率90.5%
先序的第一个为二叉树树根A,因此后序的最后一个也是A
回到中序,以A为根划分,左子树有4个结点,右子树有5个结点
现在看后序:前4个最后的是B,因此先序的第二个是B,并且中序的第二个也是B
简化如下:
先序序列 :A B C D E F_ H _ 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
有一棵二叉树的先序和中序遍历分别如下,画出该二叉树(描述生成过程),并写出其后序遍历序列.
有一棵二叉树的先序和中序遍历分别如下,画出该二叉树(描述生成过程),并写出其后序遍历序列.
先序:A B C D E F G H I J
中序:C B E D A G H F J I
Eagle1631年前1
sayeal 共回答了11个问题 | 采纳率90.9%
先序:A B C D E F G H I J
中序:C B E D A G H F J I
确定根是A,C B E D在A的左子树上,G H F J I在A的右子树上.
先序:B C D E
中序:C B E D
确定B是根,C是B的左孩子,E D在B的右子树上.
先序:D E
中序:E D
确定D是根,E是D的左孩子.
先序:F G H I J
中序:G H F J I
确定F是根,G H在F的左子树上,J I在F的右子树上.
先序:G H
中序:G H
确定G是根,H是G的右孩子.
先序:I J
中序:J I
确定I是根,J是I的左孩子.
综合起来,树的结构如下所示:
A
B F
C D G I
E H J
后序遍历序列:C E D B H G J I F A
已知一棵二叉树的的中序和后序序列如下,求该二叉树的高度(假定空树的高度为0)和度为2,度为1及度为0的结点个数.
已知一棵二叉树的的中序和后序序列如下,求该二叉树的高度(假定空树的高度为0)和度为2,度为1及度为0的结点个数.
中序序列:c,b,d,e,a,f,g,i,h,j
后序序列:c,e,d,b,i,j,h,g,f,a
高度:度为2的结点数:
度为1的结点数:度为0的结点数:
16181年前1
zzrsad 共回答了18个问题 | 采纳率100%
高度:5 度为2:3
度为1:3 度为0:4
先画图,然后数.
已知序列 18,11,17,7,5,13,41,29,37,23,19.请画出相应的二叉排序树并写出该树的前序、中序和后
已知序列 18,11,17,7,5,13,41,29,37,23,19.请画出相应的二叉排序树并写出该树的前序、中序和后序序列.
如何根据序列画树,不要结果
20050606061年前0
共回答了个问题 | 采纳率
我正在编制程序,用两种方法实现二叉树的建立,并用递归算法实现二叉树的先序、中序、后序三种遍历。
我正在编制程序,用两种方法实现二叉树的建立,并用递归算法实现二叉树的先序、中序、后序三种遍历。
具体要求:
1、 设计程序,按照完全二叉树的层次顺序建立二叉链表;
2、 设计程序按照二叉树的先序遍历用递归方法建立二叉树;
3、 设计程序,用递归算法实现二叉树的先序、中序、后序遍历。
二叉树,如下图所示:abc@@@d
雨木目1211年前1
zi紫一yi 共回答了16个问题 | 采纳率87.5%
哗啦啦啦啦啦,我的宝贝 北京欢迎你 像音乐感动你纪敏加 屠洪刚 吴彤
为什么要研究"逆波兰式"?既然"逆波兰式"就是对于2叉树的后序遍历,那么为什么先序遍历和中序遍历没有它那么重要呢,为什么
为什么要研究"逆波兰式"?
既然"逆波兰式"就是对于2叉树的后序遍历,那么为什么先序遍历和中序遍历没有它那么重要呢,为什么要突出的讲"逆波兰式"的重要性?
1105646051年前1
bb187123 共回答了26个问题 | 采纳率88.5%
对于实现逆波兰式算法,难度并不大,但为什么要将看似简单的中序表达式转换为复杂的逆波兰式?原因就在于这个简单是相对人类的思维结构来说的,对计算机而言中序表达式是非常复杂的结构.相对的,逆波兰式在计算机看来却是比较简单易懂的结构.因为计算机普遍采用的内存结构是栈式结构,它执行先进后出的顺序.
C++ 数据结构 二叉树的遍历假设一棵树的前序序列为ABCDEFGHIJ,中序序列为DBGEHJACIF.(如果不写解题
C++ 数据结构 二叉树的遍历
假设一棵树的前序序列为ABCDEFGHIJ,中序序列为DBGEHJACIF.(如果不写解题过程,那么就要画出该树)画出该树(如果不画,那么就要有详细的解题过程)
216xiang761年前1
kongjiawei1993 共回答了15个问题 | 采纳率80%
前序序列遍历:先遍历头,然后左子树,然后右子树
所以确定A是头
根据中序序列知道左子树DBGEHJ,右子树CIF
这跟前序序列的BCDEFG HIJ矛盾
如果不是我理解错题目的话,题目错了.
假设一棵二叉树的中序序列为DCBGEAHFIJK和后序序列为DCEGBFHKJIA.请画出该树. 3. 对于给定的6个实
假设一棵二叉树的中序序列为DCBGEAHFIJK和后序序列为DCEGBFHKJIA.请画出该树. 3. 对于给定的6个实数W={2
1.假设一棵二叉树的中序序列为DCBGEAHFIJK和后序序列为DCEGBFHKJIA.请画出该树.
依达1年前1
超级懒人5 共回答了21个问题 | 采纳率95.2%
//第二个多了个I,我写了个程序,并假设第二个序列没有I
#include
#include
struct node{
char c;
node *left;
node *right;
};
int depth=0;
int lengthFunc(char *string);
int lengthLeftFunc(char *string,char ref);
node *makeTree(char *string1,char *string2);
void printTree(node *newNode);
void destroyTree(node* newNode);
void main()
{
node *top=0;
char string1[]="DCBGEAHFJK";
char string2[]="DCEGBFHKJA";
top=makeTree(string1,string2);
printTree(top);
destroyTree(top);
}
int lengthFunc(char *string)
{
for(int i=0;string[i]!=' ';i++);
return i;
}
int lengthLeftFunc(char *string,char ref)
{
for(int i=0;string[i]!=ref;i++);
return i;
}
node *makeTree(char *string1,char *string2)
{
int length=lengthFunc(string1);
if(length==0)
return (node*)0;
node *newNode=(node*)malloc(sizeof(node));
newNode->c=string2[length-1];
int lengthLeft=lengthLeftFunc(string1,newNode->c);
int lengthRight=length-lengthLeft-1;
char *stringLeft1=(char*)malloc(sizeof(char)*(lengthLeft+1));
char *stringLeft2=(char*)malloc(sizeof(char)*(lengthLeft+1));
char *stringRight1=(char*)malloc(sizeof(char)*(lengthRight+1));
char *stringRight2=(char*)malloc(sizeof(char)*(lengthRight+1));
if(lengthLeft!=0){
for(int i=0;istringLeft1[i]=string1[i];
stringLeft2[i]=string2[i];
}
stringLeft1[i]=stringLeft2[i]=(char)0;
newNode->left=makeTree(stringLeft1,stringLeft2);
}
else
newNode->left=0;
if(lengthRight!=0){
for(int i=0;istringRight1[i]=string1[lengthLeft+1+i];
stringRight2[i]=string2[lengthLeft+i];
}
stringRight1[i]=stringRight2[i]=(char)0;
newNode->right=makeTree(stringRight1,stringRight2);
}
else
newNode->right=0;
free(stringLeft1);free(stringLeft2);free(stringRight1);free(stringRight2);
return newNode;
}
void printTree(node *newNode)
{
if(newNode==0)
return;
depth++;
printTree(newNode->left);
depth--;
for(int i=0;icout<<'t';
cout<c<depth++;
printTree(newNode->right);
depth--;
}
void destroyTree(node* newNode)
{
if(newNode==0)
return;
if(newNode->left!=0)
destroyTree(newNode->left);
if(newNode->right!=0)
destroyTree(newNode->right);
free(newNode);
newNode=0;
}
//按照假设,如果输入序列无I,则输出结果如图.
如果还没解决你的问题,可以加我百度HI账号.
试写出如图所示的二叉树分别按先序、中序、后序遍历时得到的结点序列
试写出如图所示的二叉树分别按先序、中序、后序遍历时得到的结点序列
麻烦快点
这是数据结构的题

qwpo12091年前2
绞百叶结 共回答了19个问题 | 采纳率89.5%
前序的顺序: 根 -> 左 -> 右
中序的顺序: 左 -> 根 -> 右
后序的顺序: 左 -> 右 -> 根
先序:A,B,D,F,J,G,K,C,E,H,I,L,M
中序:J,F,D,K,G,B,A,H,E,L,I,M,C
后序:J,F,K,G,D,B,H,L,M,I,E,C,A
什么叫二叉树的中序序列?先序序列和中序序列相同的二叉树一定是空树吗?
hbc1121年前1
lqzde 共回答了18个问题 | 采纳率88.9%
先、中、后都是对跟来讲的
中序序列就是中序遍历得到的序列
先序序列和中序序列相同的二叉树一定是空树吗?
不是,那只说明每个节点只有右孩子而已
先序线索二叉树和中序线索二叉树有什么区别
先序线索二叉树和中序线索二叉树有什么区别
最好图解
bujingyun5211年前1
xinzhiyue 共回答了16个问题 | 采纳率93.8%
先序是先根节点在左结点再右结点,中序是先左,再根节点,再右结点
数据结构的二叉树问题 假设一棵二叉树的先序序列为ABCDEFGHI,中序序列为BCAEDGHFI,写出其后序序列,并请画
数据结构的二叉树问题
假设一棵二叉树的先序序列为ABCDEFGHI,中序序列为BCAEDGHFI,写出其后序序列,并请画出该二叉树.
mwk1231年前0
共回答了个问题 | 采纳率
二叉树图是什么后序为dabec,中序为debac,求前序.答案为cedba!请问图示怎么画的,怎么思考的这道题
男人定律1年前1
小菜菜子 共回答了14个问题 | 采纳率85.7%
在后序中判断点的位置,在中序中找到对应的点

后序最后一个是C,说明根节点是C,而中序中最后一个是C,说明树只有左子树,没有右子树,这你得理解. 好了,C讨论完了,看后序中最后一个是e,说明e是C的子节点(当然也必然是左子节点)在中序中e左边的是他的左子树,右边的是他的右子树,可以看出e左边只有d,那说明d是e的左子节点,而ba在e的右子树上, 最后来判断ba是怎么排列的,
后序中a在b的前面,说明a是b的子节点(但不知道是那个子节点,后序呀,你要理解) 而在中序中b在a的前面说明,中序循环是先循环b,再循环a,那就说明了a是b的右子节点,
c
e
d b
a
形式就是这样的
已知某二叉树的先序遍历序列为:A,B,D,E,G,C,F,H,I,J,中序序列为:D,B,G,E,A,H,F,I,J,C
已知某二叉树的先序遍历序列为:A,B,D,E,G,C,F,H,I,J,中序序列为:D,B,G,E,A,H,F,I,J,C
试给出该二叉树的先序序列和后序序列
老板老板娘1年前1
广东虚云子 共回答了26个问题 | 采纳率96.2%
先序序列是A,B,D,E,G,C,F,H,I,J
后序序列是D,G,E,B,H,J,I,F,C,A
已知一个二叉树的中序序列和后序序列分别如下,请画出该二叉树.
已知一个二叉树的中序序列和后序序列分别如下,请画出该二叉树.
中序序列: D I G J L K B A E C H F
后序序列:I L K J G D B E H F C A
109的耗子1年前1
yundong993 共回答了12个问题 | 采纳率91.7%
回答
a
b c
d e f
g h
i j
l k
二叉树的中序遍历问题原题:对如下图所示的二叉树进行中序遍历的结果是(ACBDFEHGP)。(已附图)我给的答案是ACBD
二叉树的中序遍历问题
原题:对如下图所示的二叉树进行中序遍历的结果是(ACBDFEHGP)。(已附图)
我给的答案是ACBDFHGPE。是不是答案错了?求高手指点,十分感谢!

D_fish1年前1
温柔一盗 共回答了19个问题 | 采纳率100%
B、G左右分不清
请将下面这幅图的前序,中序,后序遍历顺序是什么?推导的过程帮我写下来好吗?谢啦看清我的问题啊.
meilijia08241年前1
天才之翼 共回答了19个问题 | 采纳率78.9%
前序,父节点-左子树-右子树:根节点A,左子树看到T,然后T往下没有左子树,读到右子树B,B的左子树Z,之后没有了就层层妇女会到根节点,右子树X,X下面左子树C,C下面没有左子树,右子树Y,到底了返回到X节点看他的右子树P,到底了结束.结果:ATBZXCYP
中序,左子树-父节点-右子树:从根节点A开始往左边看到T,T没有左子树所以第一个是T然后看他的右子树到B,B有左子树Z,所以先是Z再是B,左边看完了返回到根节点,读入A,然后是A的右子树,从X往左看,再从C往左边看没有,所以就是CY,返回到X,读入X,再是P,结束.结果:TZBACYXP
后序,左子树-右子树-父节点:类上,
二叉树遍历问题(前序,中序,后序)
二叉树遍历问题(前序,中序,后序)
a
/
b c
/ /
e f g
思想方法
衣剑封侯1年前1
恋上伤痕 共回答了18个问题 | 采纳率94.4%
前序遍历(DLR)
前序遍历也叫做先根遍历,可记做根左右.
前序遍历首先访问根结点然后遍历左子树,最后遍历右子树.在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树.
若二叉树为空则结束返回,否则:
(1)访问根结点
(2)前序遍历左子树
(3)前序遍历右子树
注意的是:遍历左右子树时仍然采用前序遍历方法.
中序遍历(LDR)
中序遍历也叫做中根遍历,可记做左根右.
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树.在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树.即:
若二叉树为空则结束返回,否则:
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树.
注意的是:遍历左右子树时仍然采用中序遍历方法.
后序遍历(LRD)
后序遍历也叫做后根遍历,可记做左右根.
后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点.在遍历左、右子树时,仍然先遍历左子树,再遍历右子树,最后访问根结点.即:
若二叉树为空则结束返回,否则:
(1)后序遍历左子树.
(2)后序遍历右子树.
(3)访问根结点.
注意的是:遍历左右子树时仍然采用后序遍历方法.
如上图所示二叉树
前序遍历,也叫先根遍历,遍历的顺序是,根,左子树,右子树
遍历结果:a,b,e,f,c,g
中序遍历,也叫中根遍历,顺序是 左子树,根,右子树
遍历结果:e,b,f,a,g,c
后序遍历,也叫后根遍历,遍历顺序,左子树,右子树,根
遍历结果:e,f,b,g,c,a
已知二叉树的前序序列为ABCDEFG,中序序列为DBCAFEG,则后序序列为
已知二叉树的前序序列为ABCDEFG,中序序列为DBCAFEG,则后序序列为
首先,给我把树给画出来,然后教我解题思路,
cwcwcw_19811年前1
不要提 共回答了17个问题 | 采纳率100%
首先,题目可能有问题,
思路,在先序序列中找根,中序序列中区分左右子树,递归就可以了.
由先序序列ABCDEFG,可知,该树的根为A,由中序DBCAFEG可知,A前面的DBC为该树的左子树,A后面的FEG的其右子树.
继续分析,原序列先序被分为两组,BCD和EFG,中序分别为DBC和FEG,
先序BCD,中序DBC这棵以A为根的树的左子树,其根为B,用上面方法可知,D在B前面,即D是B的左子树,C在B的后面,即为右子树,(此时,先序应该为BDC,和题目冲突,中序应该为CDBAFEG就对了,或者把先序改一下也可以.)同理可得EFG和FEG这棵树的根为E,F和G分别为其左右子树,这样一来,树就形成了.
A
/
B E
/ /
C D F G
数据结构辅导习题三、解答题(本大题共3小题,每小题4分,共12分)1.已知二叉树的先序序列和中序序列分别为HDACBGF
数据结构辅导习题
三、解答题(本大题共3小题,每小题4分,共12分)
1.已知二叉树的先序序列和中序序列分别为HDACBGFE和ADCBHFEG.
(1)画出该二叉树;
(2)画出与(1)求得的二叉树对应的森林.
2.已知带权图的邻接表如下所示,其中边表结点的结构为:
依此邻接表从顶点C出发进行深度优先遍历.
(1)画出由此得到的深度优先生成树;
(2)写出遍历过程中得到的从顶点C到其它各顶点的带权路径及其长度.
3.从空树起,依次插入关键字37,50,42,18,48,12,56,30,23,构造一棵二叉排序树.
(1)画出该二叉排序树;
(2)画出从(1)所得树中删除关键字为37的结点之后的二叉排序树.
四、算法阅读题(本大题共1小题,每小题6分,共6分)
1.已知用有序链表存储整数集合的元素.阅读算法f,并回答下列问题:
(1)写出执行f(a,b)的返回值,其中a和b分别为指向存储集合{2,4,5,7,9,12}和{2,4,5,7,9}的链表的头指针;
(2)简述算法f的功能;
(3)写出算法f的时间复杂度.
int f (LinkList ha,LinkList hb)
{
//LinkList是带有头结点的单链表
//ha和hb分别为指向存储两个有序整数集合的链表的头指针
LinkList pa,pb;
pa=ha->next;
pb=hb->next;
while(pa && pb && pa->data==pb->data)
{ pa=pa->next;
pb=pb->next;
}
if(pa==NULL && pb==NULL) return 1;
else return 0;
}
已知无向图G的邻接表如下图所示,按照实际的存储结构,分别写出从顶点1出发的深度遍历和广度遍历序列,并画出相应的生成树和生成二叉树.
kzxcvuoisdf1年前1
专业3 共回答了18个问题 | 采纳率88.9%
后面的题陆续的给你吧
已知先序:ABCDEFG,中序CDBEAFG,画出二叉树
已知先序:ABCDEFG,中序CDBEAFG,画出二叉树
看不太懂呀,可不可以麻烦讲解下呀,一直都弄不清是怎么画的,有没有什么技巧呀?
raulchamp1年前1
温州小叶 共回答了11个问题 | 采纳率100%
A
B F
C E G
D
...A是根,B是A的左子树,C是B的左子树,E是B的右子树,D是C的右子树,F是A的右子树,G是F的右子树
二叉树的先序、中序和后序序列问题
二叉树的先序、中序和后序序列问题
已知二叉树的先序、中序和后序序列分别如下,但其中有一些已模糊不清,试构造出该二叉树.
先序序列 _BC_EF__
中序序列 BDE_AG_H
后序序列 _DC_GH_A
爱若琴弦21年前1
冰点乙醇613 共回答了17个问题 | 采纳率82.4%
后序最后一个是A,所以A是先序的第一个得到:
先序序列 ABC_EF__
中序序列 BDE_AG_H
后序序列 _DC_GH_A
_____________(A)____________
____________/______________
________(BDE_)_(G_H)________
先序的第二个元素是B,所以B是A的左子树根节点
由中序B在最前,知道其他元素都在B的右子树上
所以,后序序列为(DE_)B(G_H)A,对比已有的后序序列_DC_GH_A
得后序序列为:EDCBGHFA,中序序列为:BDECAGFH
先序序列 ABC_EF__
中序序列 BDECAGFH
后序序列 EDCBGHFA
所以,二叉树为:
_____________(A)_____________
____________/_______________
__________(B)____(F)_________
________________/__________
___________(C)_(G)_(H)_______
___________/_________________
_________(D)_________________
____________________________
__________(E)________________
写出下列二叉树的前序序列、中序序列和后序序列.
luxi19931年前1
Shinsei 共回答了15个问题 | 采纳率80%
前序:C A B E F D H G
中序:B A F E C H D G
后序:B F E A H G D C
C++ 数据结构 二叉树的遍历假设一棵树的前序序列为ABCDEFGHIJ,中序序列为DBGEHJACIF.写下解题过程
C++ 数据结构 二叉树的遍历
假设一棵树的前序序列为ABCDEFGHIJ,中序序列为DBGEHJACIF.写下解题过程 (如果不写解题过程,那么就要画出该树)画出该树(如果不画,那么就要有详细的解题过程)
冰冰。。。1年前1
文梦儿 共回答了18个问题 | 采纳率94.4%
前序从前往后看
(1)A是树根
(2)在中序中找到A,A左边DBGEHJ是A的左子树,A右边CIF是A的右子树
(3)前序往后走,A有左子树,B是A左子树的根
(4)在中序中找到B,B左边D是B的左子树,B右边GEHJ是B的右子树
(5)前序往后走,B有左子树,C是B左子树的根,同(4)矛盾,(4)中B左子树只有D
so,此树不存在!
写出图中所示二叉树的先序序列,中序序列和后序序列.
独孤求胜只为何1年前1
_流浪的小猫_ 共回答了18个问题 | 采纳率100%
先序:A-C-F-B-D-E-G-H-P
中序:F-B-C-D-A-E-H-G-P
后序:B-F-D-C-H-P-G-E-A
二叉树的后续序列为DCEGBFHKJIA,中序序列为DCBGEAHFIJK,试建立这颗二叉树,画出该二叉树的先序线索二叉
二叉树的后续序列为DCEGBFHKJIA,中序序列为DCBGEAHFIJK,试建立这颗二叉树,画出该二叉树的先序线索二叉数
痞子鱼h1年前1
雪飘无迹 共回答了22个问题 | 采纳率90.9%
//第二个多了个I,我写了个程序,并假设第二个序列没有I
#include
#include
struct node{
char c;
node *left;
node *right;
};
int depth=0;
int lengthFunc(char *string);
int lengthLeftFunc(char *string,char ref);
node *makeTree(char *string1,char *string2);
void printTree(node *newNode);
void destroyTree(node* newNode);
void main()
{
node *top=0;
char string1[]="DCBGEAHFJK";
char string2[]="DCEGBFHKJA";
top=makeTree(string1,string2);
printTree(top);
destroyTree(top);
}
int lengthFunc(char *string)
{
for(int i=0;string[i]!=' ';i++);
return i;
}
int lengthLeftFunc(char *string,char ref)
{
for(int i=0;string[i]!=ref;i++);
return i;
}
node *makeTree(char *string1,char *string2)
{
int length=lengthFunc(string1);
if(length==0)
return (node*)0;
node *newNode=(node*)malloc(sizeof(node));
newNode->c=string2[length-1];
int lengthLeft=lengthLeftFunc(string1,newNode->c);
int lengthRight=length-lengthLeft-1;
char *stringLeft1=(char*)malloc(sizeof(char)*(lengthLeft+1));
char *stringLeft2=(char*)malloc(sizeof(char)*(lengthLeft+1));
char *stringRight1=(char*)malloc(sizeof(char)*(lengthRight+1));
char *stringRight2=(char*)malloc(sizeof(char)*(lengthRight+1));
if(lengthLeft!=0){
for(int i=0;istringLeft1[i]=string1[i];
stringLeft2[i]=string2[i];
}
stringLeft1[i]=stringLeft2[i]=(char)0;
newNode->left=makeTree(stringLeft1,stringLeft2);
}
else
newNode->left=0;
if(lengthRight!=0){
for(int i=0;istringRight1[i]=string1[lengthLeft+1+i];
stringRight2[i]=string2[lengthLeft+i];
}
stringRight1[i]=stringRight2[i]=(char)0;
newNode->right=makeTree(stringRight1,stringRight2);
}
else
newNode->right=0;
free(stringLeft1);free(stringLeft2);free(stringRight1);free(stringRight2);
return newNode;
}
void printTree(node *newNode)
{
if(newNode==0)
return;
depth++;
printTree(newNode->left);
depth--;
for(int i=0;icout<<'t';
cout<c<depth++;
printTree(newNode->right);
depth--;
}
void destroyTree(node* newNode)
{
if(newNode==0)
return;
if(newNode->left!=0)
destroyTree(newNode->left);
if(newNode->right!=0)
destroyTree(newNode->right);
free(newNode);
newNode=0;
}
//按照假设,如果输入序列无I,则输出结果如图.
如果还没解决你的问题,可以加我百度HI账号.
一道数据结构的题二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG .该二叉树根的右子树
一道数据结构的题
二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG .该二叉树根的右子树的根是:
bnmyn_01年前1
wcdsy 共回答了21个问题 | 采纳率95.2%
有先序可在,树根为E;
此时由中序可知,做子树节点HFI,右子树节点JKG
有先序FHI和中序HFI可知,左子树根为F,F两边的H和I分别为其左孩子和有孩子,所以左子树为
F
H I
同理,右子树为:
G
J
K
此二叉树为
E
F G
H I J
K
试写出如图所示的二叉树分别按先序、中序、后序遍历时得到的结点序列
johnson12341年前1
viking1020 共回答了16个问题 | 采纳率81.3%
前序:ABDFJGKCEHILM
中序:BFJDGKACHELIM
后序:JFKGDBHLMIECA
关于二叉树的一道证明题一棵二叉树的所有终端节点在前序序列、中序序列以及后序序列中都按相同的相对位置出现.(这种证明题怎么
关于二叉树的一道证明题
一棵二叉树的所有终端节点在前序序列、中序序列以及后序序列中都按相同的相对位置出现.
(这种证明题怎么写啊?伤脑筋呃,呵呵)
加州烟管1年前1
ghosthyl 共回答了21个问题 | 采纳率85.7%
应该使用反证法,假设节点以不同的相对位置出现,按推理后可知构不成一棵二叉树,所以得出 一棵二叉树的节点出现的位置应处于相同的相对位置
某二叉树的中序序列为BDCA,后序序列为DCBA,则前序序列为
某二叉树的中序序列为BDCA,后序序列为DCBA,则前序序列为
A.DCBA B.BDCA C.ABCD D.BADC 我知道答案,但不理解求讲解
holyy1年前1
cm154 共回答了12个问题 | 采纳率91.7%
中序是左根右的遍历 后序是左右根的遍历 树的形式:
A
/
B

C
/
D
那么前序就是ABCD
全靠手打 望采纳
已知二叉树的后序遍历序列和中序遍历序列,怎样求其前序遍历序列!
已知二叉树的后序遍历序列和中序遍历序列,怎样求其前序遍历序列!
举个例子,
捻月为盟1年前1
Maria_wu 共回答了17个问题 | 采纳率88.2%
首先理解概念:
前序遍历:访问根结点的操作发生在遍历其左右子树之前.
中序遍历:访问根结点的操作发生在遍历其左右子树之中(间).
后序遍历:访问根结点的操作发生在遍历其左右子树之后.
eg:后序遍历为DBCEFGHA,中序遍历为EDCBAHFG,求前序遍历(网上例子)
首先 看后序遍历DBCEFGHA,A为总根节点
然后 寻找中序遍历EDCBAHFG中A位置,则EDCB在A的左枝,HFG在A的右枝;
重复前两步,从后序遍历最后一位找,在中序遍历寻找对应点,得出左右分枝...
最后得到AECDBHGF,再自己验证即可...
中序与后序确定二叉树已知先序与中序 后序于中序 先序与后序 分别是否可以确定一棵二叉树
aptor9911年前1
焰の马 共回答了20个问题 | 采纳率90%
知道中序 并且知道先序和后序其中之一就能确定一颗二叉树.
例如中序和先序.
前序为 a b d e c
中序为: d b e a c
1.根据先序第一个a知道,二叉树的根节点为a
2.对应中序,知道a左边的都是在a的左子树,右边的在右子树上.
3.dbe在a的左子树上,然后根据前序之后b在这三者的最前面 所以知道b是左子树的根节点
以此类推 得到
a
b c
d e
后序和前序类似,是最后的一个结点确定根节点
呵呵~ 希望能帮得到你
已知一棵二叉树的中序序列和后序序列,请画出该二叉树 中序序列 DIGJLKBAECHF 后序序列 ILKJGDBEHFC
已知一棵二叉树的中序序列和后序序列,请画出该二叉树 中序序列 DIGJLKBAECHF 后序序列 ILKJGDBEHFCA
偶才素呆呆1年前1
strawring 共回答了22个问题 | 采纳率90.9%
先画出二叉树:
前序为:ABDGIJKLCEHF