题目链接:
思路:就是输入中序建立的二叉树,要求输出后序遍历的二叉树,就是一个逆序建树的过程,
让我想了好久
注意:(1)可以用数组,但数组需要开的大一些,不然段错误
(2)对于堆栈,push就是建树,pop就是返回它的上一级。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cstring>
#include<stack>
using namespace std;
const int maxn = 9999999;
int a[maxn],tp,num;
vector <int> v;
void build(int x)
{
if(num<=0) return ;
string s;
cin>>s;
if(s[1]=='u')
{
cin>>tp;
a[x]=tp;
num--;
build(x*2);
build(x*2+1);
}
else num--;
}
void postorder(int x,vector <int> &vc)
{
if(a[x])
{
postorder(x*2,vc);
postorder(x*2+1,vc);
vc.push_back(a[x]);
}
}
int main(void)
{
memset(a,0,sizeof(a));
int x=1,n,i,j;
cin>>n;
num=n*2;
build(1);
//for(i=1;i<=n;i++) cout<<a[i]<<" ";
v.clear();
postorder(1,v);
for(i=0;i<v.size()-1;i++) cout<<v[i]<<" ";
cout<<v[i]<<endl;
return 0;
}