![在这里插入图片描述](https://img-blog.csdnimg.cn/20200723095644544.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Jid3FzYg==,size_16,color_FFFFFF,t_70)
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
using namespace std;
const int maxn = 31;
struct node
{
int data;
node* left;
node* right;
};
int pre[maxn], in[maxn], post[maxn];
int n;
node* create(int prel, int prer, int inl, int inr)
{
if (prel > prer)
return NULL;
node* root = new node;
root->data = pre[prel];
int i;
for (i = inl; i <= inr; i++)
{
if (in[i] == pre[prel])
break;
}
int numleft = i - inl;
root->left = create(prel+1, prel + numleft , inl, i - 1);
root->right = create(prel + numleft+1, prer, i + 1, inr);
return root;
}
int num = 0;
void postorder(node* root)
{
if (root == NULL)
return;
postorder(root->left);
postorder(root->right);
cout << root->data;
num++;
if (num < n)
cout << " ";
}
int main()
{
cin >> n;
char str[5];
stack<int>st;
int x, preindex=0, inindex = 0;
for (int i = 0; i < 2 * n; i++)
{
cin >> str;
if (strcmp(str, "Push") == 0)
{
cin >> x;
pre[preindex++] = x;
st.push(x);
}
else
{
in[inindex++] = st.top();
st.pop();
}
}
node* root = create(0, n - 1, 0, n - 1);
postorder(root);
return 0;
}