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;
}