题意:根据二叉树的前序遍历和中序遍历,求出它的后续遍历
根据前序遍历的结果把中序遍历分区左子树,根和右子树,然后依次递归下去,直到叶子节点
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <set>
#define N 1000010
#define ll long long
using namespace std;
char s1[30], s2[30], s3[30];
int l, cur, c;
void trave(int left, int right){
int tmp = c++;
if (left == right){
s3[cur++] = s2[left];
return ;
}
int i;
for (i = left; i <= right; i++){
if (s1[tmp] == s2[i]){
break;
}
}
if (i-1 >= left) trave(left, i-1);
if (i+1 <= right) trave(i+1, right);
s3[cur] = s2[i];
cur++;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("1.txt", "r", stdin);
#endif
int i, j;
while(~scanf("%s%s", s1, s2)){
memset(father, 0, sizeof(father));
l = strlen(s1);
s3[l] = 0;
s3[l-1] = s1[0];
cur = 0;
c = 0;
trave(0, l-1);
puts(s3);
}
return 0;
}