Пример #1
0
Tnode* convert2BST(List *head)
{
    if(head==NULL)
        return NULL;
    List *middle,*l,*r;
    getmiddleNsplit(l,middle,r);
    Tnode* root=(Tnode*)malloc(sizeof(Tnode));
    Tnode->data=middle->data;
    Tnode->left=convert2BST(l);
    Tnode->right=convert2BST(r);
}
 TreeNode *convert2BST(ListNode *&head, int start, int end) {
     if(start > end) 
         return NULL;
     int mid = (start + end) / 2;
     TreeNode *left = convert2BST(head, start, mid - 1);
     TreeNode *node = new TreeNode(head->val);
     head = head->next;
     TreeNode *right = convert2BST(head, mid + 1, end);
     node->left = left;
     node->right = right;
     return node;
 }
 TreeNode *sortedListToBST(ListNode *head) {
     int n = 0;
     ListNode *iter = head;
     while(iter) {
         n ++;
         iter = iter->next;
     }
     
     return convert2BST(head, 0, n - 1);
 }