Node *addToBST(int arr[], int start, int end) { if(end < start) return NULL; int mid = (start + end)/2; Node *r = (Node*) malloc(sizeof(Node)); r->data = arr[mid]; r->left = addToBST(arr, start, mid-1); r->right = addToBST(arr, mid+1, end); return r; } Node *createMinimalBST(int arr[], int size) { return addToBST(arr,0,size-1); }