pat 甲級 1086(二叉樹)
阿新 • • 發佈:2018-11-18
題目連結:
思路:就是輸入中序建立的二叉樹,要求輸出後序遍歷的二叉樹,就是一個逆序建樹的過程,
讓我想了好久
注意:(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; }