给出先序遍历和中序遍历求后续遍历
#include<stdio.h>
#include<string.h>
void build(int n, char *s1, char *s2, char *s) {
if(n <= 0)
return;
int p = strchr(s2, s1[0]) - s2;
build(p, s1+1, s2, s);
build(n-1-p, s1+p+1, s2+p+1, s+p);
s[n-1] = s1[0];
}
int main() {
char str1[30], str2[30];
char ans[30];
int len;
while(scanf("%s%s", str1, str2) != EOF) {
len = strlen(str1);
build(len, str1, str2, ans);
ans[len] = '\0';
puts(ans);
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
string befor,inor,ans;
int lenb,leni;
void post(int lb,int li,int ri)
{
if(lb>=lenb||li>=leni||ri>>leni)return;
if(li==ri){ans+=befor[lb];return;}
int j;
for(j=li;j<=ri;j++)
if(inor[j]==befor[lb])break;
post(lb+1,li,j-1);
post(lb+1+j,j+1,ri);
ans+=befor[lb];
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
while(cin>>befor>>inor)
{
ans.clear();
lenb=befor.size(),leni=inor.size();
post(0,0,leni-1);
ans+='\0';
cout<<ans<<endl;
}
return 0;
}