可以类似的写一下根据后序遍历和中序遍历得出先序遍历,只要理解函数递归调用的过程就很好写,
函数递归调用的过程只要记住一句话,只有递归返回条件满足才会返回,只有当前的所有问题都解决了,
才会递归回到上一层。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cctype>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#define LL __int64
using namespace std;
const double pi=4*atan(1.0);
const int MAXN=1001;
void build(int n,char *s1,char *s2,char *s)
{
if(n<=0) return;
int p=strchr(s2,s1[0])-s2;
// cout<<p<<endl;
//s[0]=s1[n-1];
build(p,s1+1,s2,s);
// cout<<"diaoyong1"<<endl;
build(n-p-1,s1+p+1,s2+p+1,s+p);
// cout<<"diaoyong2"<<endl;
// cout<<s1[0]<<endl;
s[n-1]=s1[0];
}
int main()
{
char s1[MAXN],s2[MAXN],ans[MAXN];
while(scanf("%s%s",s1,s2)==2)
{
int n=strlen(s1);
build(n,s1,s2,ans);
ans[n]='\0';
cout<<ans<<endl;
}
return 0;
}