代码
#include<stdio.h>
#include<string.h>
struct{
int left,right;
}node[35];
int st[35],top=0;
void postorder(int num){
int i;
if(node[num].left!=-1) postorder(node[num].left);
if(node[num].right!=-1) postorder(node[num].right);
st[top++]=num;
}
/// pre order and in order build tree
int buildtree(int *pres,int *ins,int num){
int loc=0,root=*pres;
if(num>0){
for(loc=0;loc<num;loc++) if(ins[loc]==root) break;
if(ins[loc]!=root) return -1;
node[root].left=buildtree(pres+1,ins,loc);
node[root].right=buildtree(pres+loc+1,ins+loc+1,num-loc-1);
return root;
}
return -1;
}
int main(){
int n,pres[35],ins[35],in=0,pre=0,i,tree;
char str[5];
scanf("%d",&n);
for(i=0;i<2*n;i++){
scanf("%s",str);
if(!strcmp("Push",str)){
scanf("%d",&st[top++]);
pres[pre++]=st[top-1];
}else{
ins[in++]=st[--top];
}
}
tree=buildtree(pres,ins,n);
top=0;
postorder(tree);
printf("%d",st[0]);
for(i=1;i<top;i++) printf(" %d",st[i]);
}