PAT1086 Tree Traversals Again

传送门

从栈中获得前序和中序,求后序。

与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':' ');
    }
}
发布了88 篇原创文章 · 获赞 6 · 访问量 7899

猜你喜欢

转载自blog.csdn.net/kl782636177/article/details/105150731
今日推荐