1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 using namespace std; 6 7 struct Nod 8 { 9 int num; 10 Nod *left; 11 Nod *right; 12 Nod() 13 { 14 num=0; 15 left=right=NULL; 16 } 17 }; 18 19 template <class TYPE> 20 Nod* buildBinarySortTree(TYPE *a,int i,int size,Nod *head,Nod * &h) 21 { 22 if(i>=size) 23 { 24 return head; 25 } 26 if(h==NULL) 27 { 28 h=new Nod; 29 h->num=a[i]; 30 head=(head?head:h); 31 buildBinarySortTree(a,i+1,size,head,head); 32 } 33 else 34 { 35 if(a[i]>h->num) 36 { 37 buildBinarySortTree(a,i,size,head,h->right); 38 } 39 else 40 { 41 buildBinarySortTree(a,i,size,head,h->left); 42 } 43 } 44 return head; 45 } 46 47 void displayBinarySortTree(Nod *head) 48 { 49 if(head) 50 { 51 displayBinarySortTree(head->left); 52 cout<<head->num; 53 displayBinarySortTree(head->right); 54 } 55 } 56 57 void freeBinarySortTree(Nod *head) 58 { 59 if(head) 60 { 61 freeBinarySortTree(head->left); 62 freeBinarySortTree(head->right); 63 delete head; 64 } 65 } 66 67 int main() 68 { 69 int n; 70 while(cin>>n&&n) 71 { 72 int i; 73 int *a=new int[n+1]; 74 for(i=0;i<n;i++) 75 { 76 cin>>a[i]; 77 } 78 Nod *head=NULL; 79 head=buildBinarySortTree(a,0,n,head,head); 80 displayBinarySortTree(head); 81 freeBinarySortTree(head); 82 delete a; 83 } 84 return 0; 85 } 86 87 /* 88 5 89 4 7 3 2 1 90 */