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);
}
Exemplo n.º 3
0
int is_bst2(bst *b)
{
	if(!b || (!b->left && !b->right) )
		return 1;
	return bst_helper(b,INT_MIN,INT_MAX);
}
Exemplo n.º 4
0
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);
}