题意:给出二叉排序树的后序遍历序列,要求遍历右子树->左子树->根的序列。
思路:二叉树基本操作。
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1136
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <string> 5 #include <algorithm> 6 #include <iostream> 7 using namespace std; 8 const int N=3010; 9 10 typedef struct BiTNode{ 11 int data; 12 struct BiTNode *lchild,*rchild; 13 }BiTNode,*BiTree; 14 15 int a[N],ans[N]; 16 int cnt; 17 18 void Build(int data,BiTree &T){ 19 if(T==NULL){ 20 T=(BiTree)malloc(sizeof(BiTNode)); 21 T->data=data; 22 T->lchild=T->rchild=NULL; 23 return ; 24 } 25 else if(data> T->data) Build(data,T->rchild); 26 else Build(data,T->lchild); 27 } 28 29 void Print(BiTree &T){ 30 if(T==NULL) return ; 31 Print(T->rchild); 32 Print(T->lchild); 33 ans[++cnt]=T->data; 34 } 35 36 int main(){ 37 38 // freopen("data.in","r",stdin); 39 // freopen("data.out","w",stdout); 40 41 int n; 42 while(scanf("%d",&n)!=EOF){ 43 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 44 cnt=0; 45 BiTree head=NULL; 46 for(int i=n;i>=1;i--) Build(a[i],head); 47 Print(head); 48 for(int i=1;i<=cnt;i++) printf(i==cnt?"%d\n":"%d ",ans[i]); 49 puts(""); 50 } 51 return 0; 52 }