先用栈吧这棵树给构建出来,再后序遍历
#include<iostream>
#include<stack>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N=33;
int l[N],r[N];
vector<int> inorder,preorder;
unordered_map<int ,int> map;
int n;
int build(int ll,int lr,int rl,int rr)
{
int root=preorder[ll];
int k=map[root];
if(k>rl) l[root]= build(ll+1,k-rl+ll,rl,k-1);
if(k<rr) r[root] =build(k-rl+ll+1,lr,k+1,rr);
return root;
}
void postorder(int root)
{
if(l[root]!=0) postorder(l[root]);
if(r[root]!=0) postorder(r[root]);
cout<<root<<' ';
}
int main()
{
stack<int>s;
cin>>n;
for(int i=0;i<n*2;i++)
{
string a;cin>>a;
if(a=="Push")
{
int b;
cin>>b;
s.push(b);
preorder.push_back(b);
}
else
{
inorder.push_back(s.top());
s.pop();
}
}
for(int i=0;i<n;i++)
map[inorder[i]]=i;
int root= build(0,n-1,0,n-1);
postorder(root);
return 0;
}