栈的入栈出栈过程可以唯一描绘一棵二叉树;
入栈顺序是先序遍历顺序,出栈顺序是中序遍历顺序;
然后根据先序遍历序列和后序遍历序列求出后序遍历序列(该过程可用栈来存结果)。
#include <iostream>
#include <stack>
#include <vector>
#include <stdio.h>
using namespace std;
int num;
vector<int> preo;
vector<int> ino;
stack<int> ans;
void posto(int inb,int ine,int preb){
for(int i=inb;i<=ine;i++){
if(ino[i]==preo[preb]){
ans.push(ino[i]);
posto(i+1,ine,preb+i-inb+1);
posto(inb,i-1,preb+1);
}
}
}
int main()
{
//freopen("D:/test.txt","r",stdin);
cin>>num;
int i=num*2;
stack<int> sta;
while(i){
i--;
string s;
cin>>s;
if(s=="Push"){
int a;
cin>>a;
sta.push(a);
preo.push_back(a);
}else if(s=="Pop"){
ino.push_back(sta.top());
sta.pop();
}
}
posto(0,num-1,0);
cout<<ans.top();
ans.pop();
while(!ans.empty()){
cout<<" "<<ans.top();
ans.pop();
}
return 0;
}