从栈中获得前序和中序,求后序。
与1020相似https://blog.csdn.net/kl782636177/article/details/105129754
#include <iostream>
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
#define sca(x) scanf("%d",&x)
#define sca2(x,y) scanf("%d%d",&x,&y)
#define scl(x) scanf("%lld",&x)
#define pri(x) printf("%d\n",x)
#define pri2(x,y) printf("%d %d\n",x,y)
#define prs(x) printf("%s\n",(x))
#define prl(x) printf("%lld\n",x)
#define ll long long
#define PII pair<int,int>
#define eps 1e-6
#define inf 1e17
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=1e3+5;
struct node{
int value,index;
}tree[maxn];
//int pre[maxn],in[maxn];
vector<int>pre,in,post;
void dfs(int preL,int inL,int inR){
if(inL>inR)return;
int k=inL;
while(in[k]!=pre[preL]) k++;
dfs(preL+1,inL,k-1);
dfs(preL+1+(k-inL),k+1,inR);
post.push_back(pre[preL]);
}
string s;
int n,b;
stack<int>st;
int main(){
cin>>n;
rep(i,0,n*2){
cin>>s;
if(s[1]=='u'){
cin>>b;
st.push(b);
pre.push_back(b);
}
if(s[1]=='o'){
in.push_back(st.top());
st.pop();
}
}
dfs(0,0,n-1);
rep(i,0,post.size()){
printf("%d%c",post[i],i==post.size()-1?'\n':' ');
}
}