一棵二叉树的先序遍历为ABDFCEGH,中序遍历为BFDAGEHC,画出这棵二叉树.

作者&投稿:赖垂 (若有异议请与网页底部的电邮联系)
已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,试画出这棵二叉树,并写出后续遍历~

左一定优先于右 ,所以根的位置有三种。
根 左 右、左 根 右、左 右 根。
分别称为先序遍历、中序遍历、后续遍历,子树也一样,到一个子树就遍历一次,按照遍历顺序写下去就好,尤其注意根特殊对待(只有一个所以只写一个)。
后续遍历是:CBEFDA

这个是你要找的吗?
#include#include#includetypedef struct BiTNode{ char e; struct BiTNode *lchild,*rchild;}BiTNode;void preOrderTravse(BiTNode *T1){ if(T1){ printf("%c",T1->e); preOrderTravse(T1->lchild); preOrderTravse(T1->rchild); }}void inOrderTravse(BiTNode *T1){ if(T1){ inOrderTravse(T1->lchild); printf("%c",T1->e); inOrderTravse(T1->rchild); }}void postOrderTravse(BiTNode *T1){ if(T1){ postOrderTravse(T1->lchild); postOrderTravse(T1->rchild); printf("%c",T1->e); }}int CreateBiTree(BiTNode **T1,char *preString,char *inString,int start,int end){ if(start==end){ *T1=NULL; } else{ *T1=(BiTNode*)malloc(sizeof(BiTNode)); int middle=start; while(inString[middle]!=*preString) middle++; (*T1)->e=*preString; preString++; CreateBiTree(&((*T1)->lchild),preString,inString,start,middle); preString+=middle-start; //特别注意这一点:不是加middle,而是加middle-start! CreateBiTree(&((*T1)->rchild),preString,inString,middle+1,end); } return 1;}int main(){ /* char preString[]="ABECDFGHIJ",inString[]="EBCDAFHIGJ"; */ //更通用的方法: char *preString,*inString; char pre[50],in[50]; preString=pre; inString=in; printf("请输入前序序列:"); gets(preString); printf("请输入中序序列:"); gets(inString); // int start=0,end=0; end=strlen(preString); //start、end是指当前inString串的起始与结束 BiTNode *T1; CreateBiTree(&T1,preString,inString,start,end); preOrderTravse(T1); printf("
"); inOrderTravse(T1); printf("
"); postOrderTravse(T1); return 0;}参考:http://www.itnose.net/detail/6212347.html

1、由先序遍历特征,根节点必在先序序列首部,可知根节点是A;由中序遍历特征,根节点必在中间,可以得到左子树子孙(BFD),右子树子孙(GEHC);


2、继续可得子树B(先序BDF中序BFD)

3、C(先序CEGH中序GEHC);

4、重复上述步骤,即可唯一地确定一棵二叉树





有关计算机二级vF 笔试的真题
答:(1)下列叙述中正确的是 A) 栈是“先进先出”的线性表B) 队列是“先进后出”的线性表C) 循环队列是非线性结构D) 有序线性表既可以采用顺序存储结构,也可以采用链式存储结构(2)支持子程序调用的数据结构是 A) 栈 B) 树 C) 队列 D)二叉树(3)某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是 ...