根据题意要想到push的是先序
pop的是中序
然后就转化为树的先序中序转后序问题
#include<iostream>
#include<vector>
using namespace std;
vector<int> pre,in,post,stack;
void Post(int root,int start,int end){
if(start>end) return;
int i=start;
while(i<end&&in[i]!=pre[root]) i++;
Post(root+1,start,i-1);
Post(root+i-start+1,i+1,end);
post.push_back(pre[root]);
}
int main(){
int N;
cin>>N;
for(int i=0;i<2*N;i++){
string x;
int index;
cin>>x;
if(x=="Push"){
scanf("%d",&index);
pre.push_back(index);
stack.push_back(index);
}else{
in.push_back(stack[stack.size()-1]);
stack.pop_back();
}
}
Post(0,0,N-1);
for(auto it=post.begin();it!=post.end();it++){
if(it==post.begin()){
printf("%d",*it);
}else{
printf(" %d",*it);
}
}
return 0;
}