build右序列的时候粗心,根节点p传错参数了,改了很久才发现
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
#define DEBUG
const int maxn=26+5,maxv=26;
char pre_s[maxn],in_s[maxn];
void build(int l,int r,int p,int len){
if(p>=len)return;
char c=pre_s[p];
int m=-1;
// printf("%c %d %d\n", c,l,r);
if(l>r)return;
for(int i=l;i<=r;i++)
if(in_s[i]==c)
m=i;
// cout<<m<<endl;
// if(m==-1)
// printf("%d %d %d %d\n", l,r,m,p);
build(l,m-1,p+1,len);build(m+1,r,p+1+m-l,len);
// printf("%c\n", c);
cout<<c;
}
int main(){
#ifdef DEBUG
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
while(scanf("%s",pre_s)!=EOF){
scanf("%s",in_s);
// cout<<pre_s<<endl;
// cout<<in_s<<endl;
build(0,strlen(in_s)-1,0,strlen(in_s));
cout<<endl;
}
#ifdef DEBUG
fclose(stdin);
fclose(stdout);
#endif
return 0;
}