【问题描述】
已知一个二叉树的中序遍历序列和后序遍历序列,求这棵树的前序遍历序列。
【输入形式】
一个树的中序遍历序列 该树后序遍历序列,中间用空格分开。输入序列中仅含有小写字母,且没有重复的字母
【输出形式】
一个树的前序遍历序列
【样例输入】
dbeafcg debfgca
【样例输出】
abdecfg
#include <bits/stdc++.h>
using namespace std;
char in[100200];
char post[100200];
typedef struct BiTnode{
char data;
struct BiTnode *lchild,*rchild;
}BiTnode,*BiTree;
BiTree bulid(string s1,string s2){
BiTnode *T = NULL;
string lc_in,rc_in;
string lc_post,rc_post;
if(s2.size() > 0){
T = new BiTnode;
int len = s2.size();
T->data = s2[len - 1];
T->lchild = NULL;
T->rchild = NULL;
int index = s1.find(s2[len - 1]);
lc_in = s1.substr(0,index);
rc_in = s1.substr(index + 1,s1.size() -index - 1);
lc_post = s2.substr(0,index);
rc_post = s2.substr(index,s2.size() - index - 1);
T->lchild = bulid(lc_in,lc_post);
T->rchild = bulid(rc_in,rc_post);
}
return T;
}
void preorder(BiTree T){
if(T != NULL){
cout << T -> data;
preorder(T->lchild);
preorder(T->rchild);
return ;
}
}
int main(){
string s1;
string s2;
cin >> s1 >> s2;
BiTree T;
T = bulid(s1,s2);
preorder(T);
return 0;
}