题目描述
已知二叉树的中序和先序遍历可以唯一确定后序遍历、已知中序和后序遍历可以唯一确定先序遍历,但已知先序和后序,却不一定能唯一确定中序遍历。现要求根据输入的中序遍历结果及先序遍历结果,要求输出其后序遍历结果。
输入
输入数据占2行,其中第一行表示中序遍历结果,第二行为先序遍历结果。
输出
对测试数据,输出后序遍历结果。
样例输入
BFDAEGC
ABDFCEG
样例输出
FDBGECA
参考程序
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct node
{
char data;
struct node*lchild,*rchild;
}BTnode;
BTnode *create(char *pre,char *in,int n)
{
BTnode *b;
char *p;
int k;
if(n<=0)
return NULL;
b=(BTnode *)malloc(sizeof(BTnode));
b->data=*pre;
for(p=in;p<in+n;p++)
{
if(*p==*pre)
break;
}
k=p-in;
b->lchild=create(pre+1,in,k);
b->rchild=create(pre+k+1,p+1,n-k-1);
return b;
}
void Post(BTnode *b)
{
if(b!=NULL)
{
Post(b->lchild);
Post(b->rchild);
printf("%c",b->data);
}
}
int main()
{
char pre[100],in[100];
BTnode *b;
int n;
scanf("%s",in);
scanf("%s",pre);
n=strlen(pre);
b=create(pre,in,n);
Post(b);
return 0;
}
注意
该程序仅供学习参考!