二叉树的中序遍历为:4、5、2、1、6、3、8、7、9.后序遍历为:5、4、2、6、8、9、7、3、1,画出二叉树

作者&投稿:傅叙 (若有异议请与网页底部的电邮联系)
二叉树T,已知其前序遍历序列为1 2 4 3 5 7 6,中序遍历序列为4 2 1 5 7 3 6,求后序遍历序列。~

由前序遍历得知 1 为根结点,则由中序遍历可知, 4 、2为其左子树, 5 、7、3、6 为右子树, 则在根据前序遍历4 、2 顺序得知 2 为根,从中序得知 4 为 2 的左子树, 以此类推,可得到一个二叉树, 其后序遍历则为
4 2 7 5 6 3 1

答案:A:5 , 3 , 6 , 4 , 2 , 9 , 10 , 8 , 7 , 1,B:6 , 3 , 5 , 2 , 4 , 10 , 9 , 7 , 8 , 1,C:6 , 3 , 5 , 4 , 2 。
9 , 10 , 8 , 7 , 1,D:6 , 3 , 4 , 5 , 9 , 2 , 10 , 7 , 8 , 1,6 , 3 , 5 , 4 , 2 , 9 , 10 , 8。
前序遍历(VLR),[1]是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。



简介
前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
若二叉树为空则结束返回,否则:
(1)访问根结点。
(2)前序遍历左子树。
(3)前序遍历右子树 。
需要注意的是:遍历左右子树时仍然采用前序遍历方法。
如图1所示二叉树
前序遍历结果:ABDECF
已知后序遍历和中序遍历,就能确定前序遍历。

首先理解概念:
前序遍历:访问根结点的操作发生在遍历其左右子树之前。
中序遍历:访问根结点的操作发生在遍历其左右子树之中(间)。
后序遍历:访问根结点的操作发生在遍历其左右子树之后。
来看你的题目:
1.由后序遍历5、4、2、6、8、9、7、3、1可知根为1
2.在中序遍历4、5、2、1、6、3、8、7、9中找到1,可知(左)452-1-63879(右)
对左右支分别重复上述步骤,即
在后序遍历中观察452的相对位置可知2为根,则有45-2-空
在后序遍历中观察63879的相对位置可知3为根,则有6-3-879
……
由此可得出树的结构为
------------------------------1
---------2L 3R
----4L 空 6L 7R
-空 5R 空 空 8L 9R
图中L表示左,R表示右,用空格区分位置,希望楼主能够明白

步骤:
后序最后一个值为1,则表示根节点为1。
查看中序由1,分割成 452 和 63879 两棵子树。

对“左子树”---中序452和后序542,得到根节点为2。中序452表明45组成2的左子树,根节点为4,5为4的右子树。

对“右子树”---中序63879和后序68973,得到根节点为3。6为左子树,右子树为--中序879和后序897。所以根节点为7,左子树为8,右子树为9。

所以最后是 1
/ \
2 3
/ / \
4 6 7
\ / \
5 8 9

/*
10 用0替代 运行C程序 输入如下:
***********Bitree*****
input a tree preorder:
1236457890
input a tree midoeder:
3625419807

1236457890
3625419807
6354290871
结果为:6 3 5 4 2 9 10 8 7 1
*/

#include <stdio.h>
#include <stdlib.h>
#define max 100

typedef char ch[10];

void fun(ch x,ch y){
if(*x){
ch x1,x2,y1,y2;
char *p,*q,*t; char r; int n=0;
r=*x; t=y; p=y1; q=y2;
while(*t!=r){
*(p++)=*(t++);
n++;
}
t++; *p='\0';
while(*t) *(q++)=*(t++);
*q='\0'; t=&x[1]; p=x1; q=x2;
for (int i=0;i<n;i++) *(p++)=*(t++); *p='\0';
while(*t) *(q++)=*(t++); *q='\0';
fun(x1,y1); fun(x2,y2);
printf("%c",r);
}
}

void f(){
ch x,y;
printf("input a tree preorder:\n"); gets(x);
printf("input a tree midoeder:\n"); gets(y);
printf("\n");
puts(x); puts(y);
fun(x,y);
printf("\n");
}

void main(){
printf("***********Bitree************\n");
int n=1;
while(n){
f();
printf("0:break 1 :continue\n");
printf("input your select :");
scanf("%d",&n); getchar();
}
}


什么是先、中、后根遍历?什么是左子树、右子树和二叉树?
答:如右图所示二叉树,后根遍历结果:DEBFCA 4、左子树就是以当前节点看,它的左子节点那一分支的子树,该子树以当前节点左子节点为根。5、右子树就是以当前节点看,它的右子节点那一分支的子树,该子树以当前节点右子节点为根。左右子树只在二叉树中有意义,因为二叉树非左即右。6、二叉树 在计算机...

写出下列二叉树的先序、中序、后序序列
答:对于这个题目,中序遍历这可二叉树 先看根节点 1 / \ 左子树 右子树 我们应该先遍历左子树 也就是下面这棵树 2 / \ 4 5 对于这棵树在进行中序遍历 我们应先遍历她的左子树 他只有一个根节点4,左右子树都为空 哪么遍历这个只有一个根节点的二叉树 先访问她的左子树,为空 返...

中序遍历一棵二叉排序树的结点就可得到排好序的结点序列。这句话对吗...
答:因为二叉排序树的根节点大于左子树,小于右子树,然后使用中序遍历算法,中序遍历算法先遍历左子树,然后是根节点,然后是右子树。根据遍历的特性,所有的先遍历的结点,一定是小于后边遍历的结点,所以说中序遍历一棵二叉排序树的结点就可以得到一个排好序的序列。

已知二叉树的中序序列,后序序列,怎么求前序序列
答:求解树的子树。找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点左边和右边都为空,则根节点已经为叶子节点。递归求解树。将左子树和右子树分别看成一棵二叉树,重复1、2、3步,直到所有的节点完成定位。...

如何根据后序遍历和中序遍历建立二叉树
答:include<stdio.h> include<stdlib.h> include<string.h> define SIZE 100 typedef char ElemType;//声明二叉树结构体 typedef struct node { ElemType data;struct node *lchild,*rchild;}BitTree;BitTree *createBinTreeByPostIn(char *post,char *in,int number){ if(number==0) return NULL;c...

二叉树前序中序后序口诀
答:中序:是二叉树遍历中的一种,即先遍历左子树,后访问根结点,然后遍历右子树。若二叉树为空则结束返回。后序:是二叉树遍历中的一种,即先遍历左子树,后遍历右子树,然后访问根结点,遍历左、右子树时,仍先遍历左子树,后遍历右子树,最后遍历根结点。后续遍历的特点是执行操作时,肯定已经遍历过...

关于二叉树的问题
答:后序4275631 1左子节点2 1右子节点3 2左子节点4 3左子节点5 3右子节点6 5右子节点7 加分题,前序:ABEFCGD 中序:EFBGCDA 求后序(写方法步骤)因为前序遍历为:ABEFCGD,你可以确定A为树根。再看中序遍历:EFBGCDA,所以这棵树只有左子树 而且B为左子树的根,再看中序遍历:EFB,所以EF...

已知二叉树的中序序列和后序序列,怎么求前序序列
答:3、在后序序列LHD中最后出现的元素为D,HL|D|B|EK|A|FCG 4、在后序序列LH中最后出现的元素为H,H|L|D|B|EK|A|FCG 5、在后序序列KE中最后出现的元素为E,H|L|D|B|E|K|A|FCG 5、在后序序列FGC中最后出现的元素为C,H|L|D|B|E|K|A|F|C|G 6、所有元素都已经定位,二叉...

二叉树的遍历?
答:若二叉树非空,则依次执行如下操作:(1) 访问当前结点;(2) 遍历结点的左子树;(3) 遍历结点的右子树。3.后序遍历得递归算法定义:若二叉树非空,则依次执行如下操作:(1)遍历结点的左子树;(2)遍历结点的右子树;(3)访问当前结点。4.中序遍历的算法实现 用二叉链表做为存储结构,中序遍历...

有一棵深度为四的二叉树,它的前序遍历和中序遍历相同,则若想把它变成满...
答:首先,我们需要理解前序遍历和中序遍历在二叉树中的行为。前序遍历的顺序是:根节点 -> 左子树 -> 右子树。中序遍历的顺序是:左子树 -> 根节点 -> 右子树。在这个问题中,前序遍历和中序遍历相同,意味着每一个节点都有两个子节点,除了根节点以外。因此,我们可以得出结论:对于深度为4的二叉...