已知二叉树的中序和先序遍历可以唯一确定后序遍历、已知中序和后序遍历可以唯一确定先序遍历,但已知先序和后序,却不一定能唯一确定中序遍历。现要求根据输入的中序遍历结果及后序遍历结果,要求输出其先序遍历结果。输入第一行为中序序列
第二行为后续序列输出输出为遍历二叉树得到的先序序列
(先通过后序序列判断根结点,再通过中序序列判断左右子树,循环这个过程)
样例输入 复制样例
BFDAEGC
FDBGECA
样例输出
ABDFCEG
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
struct TN {
char data;
struct TN *lchild,*rchild;
};
void CreatTN(TN *&t,char *latter,char *mid,int n) {
int k;
char *p;
if(n<=0) t=NULL;
else{
t=(TN *)malloc(sizeof(TN));
t->data=*(latter+n-1);
for(p=mid;p<mid+n;p++)
{
if(*p==*(latter-1+n))
{
break;
}
}
k=p-mid;
CreatTN(t->lchild,latter,mid,k);
CreatTN(t->rchild,latter+k,p+1,n-k-1);
}
}
void BianLi(TN *&t) {
if(t!=NULL) {
cout<<t->data;
BianLi(t->lchild);
BianLi(t->rchild);
}
}
int main() {
TN *t;
char mid[100];
char latter[100];
cin>>mid;
cin>>latter;
int n=strlen(mid);
CreatTN(t,latter,mid,n);
BianLi(t);
return 0;
}