已知二叉树的中序和先序遍历可以唯一确定后序遍历、已知中序和后序遍历可以唯一确定先序遍历,但已知先序和后序,却不一定能唯一确定中序遍历。现要求根据输入的中序遍历结果及先序遍历结果,要求输出其后序遍历结果。
输入
输入数据占2行,其中第一行表示中序遍历结果,第二行为先序遍历结果。
输出
对测试数据,输出后序遍历结果。
样例输入
BFDAEGC ABDFCEG
样例输出
FDBGECA
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
typedef struct Node
{
char data;
struct Node *left,*right;
}BitTree;
void Create(BitTree *&T, char *pre, char *in, int n)
{
int k;
char *p;
if (n <= 0)
{
T = NULL;
return;
}
T = new BitTree;
T->data = *pre;
for (p = in; p<in + n; p++)
{
if (*p == *pre)
{
break;
}
}
k = p - in;
Create(T->left, pre + 1, in, k);
Create(T->right, pre + k + 1, p + 1, n - k - 1);
return;
}
void Disp(BitTree *T)
{
if (T)
{
Disp(T->left);
Disp(T->right);
cout << T->data;
}
}
int main()
{
BitTree *T;
int n;
char pre[100];
char in[100];
cin >> in;
cin >> pre;
n = strlen(in);
Create(T, pre, in, n);
Disp(T);
}