data structure classical problem,study to create BST
#include <cstdio> #include <cstdlib> const int N=1003; int arr[N]; typedef struct BitNode{ int data; BitNode *lchild,*rchild; }BitNode; bool success,tag; void createBST(BitNode *&root,int low,int high,int version){ if(!success) return; if(low<=high){ int pivot=arr[low]; int i=low+1; for(;i<=high;i++){ if(version==0){ if(arr[i]>=pivot) break; } else{ if(arr[i]<pivot) break; } } for(int j=i;j<=high;j++){ if(version==0){ if(arr[j]<pivot){ success=false; return; } } else{ if(arr[j]>=pivot){ success=false; return; } } } root=(BitNode*)malloc(sizeof(BitNode)); root->data=pivot; root->lchild=NULL;root->rchild=NULL; createBST(root->lchild,low+1,i-1,version); createBST(root->rchild,i,high,version); } } void postTraverse(BitNode *root){ if(root){ postTraverse(root->lchild); postTraverse(root->rchild); if(tag) tag=false; else printf(" "); printf("%d",root->data); delete root; } } int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",arr+i); BitNode *root=NULL; success=true; createBST(root,0,n-1,0); if(success){ tag=true; puts("YES"); postTraverse(root); printf("\n"); return 0; } success=true; createBST(root,0,n-1,1); if(!success) puts("NO"); else{ tag=true; puts("YES"); postTraverse(root); printf("\n"); } return 0; }