struct TreeNode* bst_helper(struct ListNode **head, int size) { if(size == 0) return NULL; struct TreeNode *root = (struct TreeNode *)malloc(sizeof(struct TreeNode)); root->left = bst_helper(head,size/2); root->val = (*head)->val; (*head) = (*head)->next; root->right = bst_helper(head,size - size/2 - 1); return root; }
struct TreeNode* sortedListToBST(struct ListNode* head) { int size = get_size(head); if(head == NULL) return NULL; return bst_helper(&head,size); }
int is_bst2(bst *b) { if(!b || (!b->left && !b->right) ) return 1; return bst_helper(b,INT_MIN,INT_MAX); }
int bst_helper(bst *b, int min, int max) { if( !(min <= b->val && b->val < max)) return 0; return bst_helper(b->left,min,b->val) && bst_helper(b->right,b->val+1,max); }