1、全局变量n不要再在main里面重复定义;
2、后序遍历的时候记得最后要跳出函数;
#include<iostream>
#include<stack>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=50;
struct node{
int data;
node* lc;
node* rc;
};
int pre[maxn];
int in[maxn];
int pos[maxn];
int n;
//vector<int> pre,in;
node* create(int prel,int prer,int inl,int inr){
if(prel>prer){
return NULL;
}
node *root=new node;
root->data=pre[prel];
int k=0;
for(int i=inl;i<=inr;i++){
if(in[i]==pre[prel]){
k=i;
break;
}
}
int templ=k-inl;
root->lc=create(prel+1,prel+templ,inl,k-1);
root->rc=create(prel+1+templ,prer,k+1,inr);
return root;
}
int num=0;
void postraverse(node* a){
if(a==NULL){
return;
}
postraverse(a->lc);
postraverse(a->rc);
num++;
if(num<n)
printf("%d ",a->data);
else
printf("%d",a->data);
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
#endif
//int n;
cin>>n;
stack<int> s;
int front;
char ss[5];
int precount=0,incount=0;
for(int i=0;i<2*n;i++){
//cin>>ss;
scanf("%s",ss);
if(strcmp(ss,"Push")==0){
cin>>front;
//pre.push_back(front);
pre[precount++]=front;
s.push(front);
}else{
//in.push_back(s.top());
in[incount++]=s.top();
s.pop();
}
}
node* root=create(0,n-1,0,n-1);
postraverse(root);
return 0;
}