#include<stdio.h>
#include<stack>
#include<string>
#include<string.h>
#include<iostream>
using namespace std;
int n, sum=0, pre[35]={0}, in[35]={0};
struct pnode{
int data;
pnode *left;
pnode *right;
};
pnode * DFS(int preL,int preR, int inL, int inR){
if(preL>preR)return NULL;
pnode *root=new pnode;
root->data=pre[preL];
int k;
for(k=inL;k<=inR;k++)
if(in[k]==pre[preL])break;
root->left=DFS(preL+1,preL+(k-inL),inL,k-1);
root->right=DFS(preL+(k-inL)+1,preR,k+1,inR);
return root;
}
void postorder(pnode *root){
if(root->left!=NULL)postorder(root->left);
if(root->right!=NULL)postorder(root->right);
printf("%d",root->data);sum++;
if(sum<n)printf(" ");
}
int main(){
int i, k, ii_in=0, ii_pre=0;
string temp;
stack<int> sta;
scanf("%d",&n);
for(i=0;i<2*n;i++){
cin>>temp;
//scanf("%s",&temp);
if(temp=="Push"){scanf("%d",&k);pre[ii_pre++]=k;sta.push(k);}
else {in[ii_in++]=sta.top();sta.pop();}
}
pnode *root=DFS(0,n-1,0,n-1);
postorder(root);
return 0;
}
PAT-A1086
最新推荐文章于 2020-02-20 15:47:35 发布