109. Convert Sorted List to Binary Search Tree

Posted hankunyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了109. Convert Sorted List to Binary Search Tree相关的知识,希望对你有一定的参考价值。

和 148. Sort List 一样的思路,需要把链表一分为二,利用快慢指针即可。

需要注意的是,写完一定要 两个节点 三个节点 代入几个 test case 检查一下,非常容易出错。下面做法是把最后slow的位置作为 root,递归左半边和右半边。

时间复杂度 O(nlogn) 空间复杂度 O(h)

class Solution {
public:
    TreeNode* sortedListToBST(ListNode* head) {
        return buildBST(head);
    }
    
    TreeNode *buildBST(ListNode *head){ // mid as root
        if (head==NULL) return NULL;
        if (head->next==NULL) return new TreeNode(head->val);
        
        ListNode *slow=head, *fast=head, *prev;
        while (fast!=NULL && fast->next!=NULL){
            fast = fast->next->next;
            prev = slow;
            slow = slow->next;
        }
        prev->next = NULL;
        ListNode *mid=slow;
        TreeNode *root=new TreeNode(mid->val);
        root->left  = buildBST(head); 
        root->right = buildBST(mid->next);
        return root;
    }
};

 

以上是关于109. Convert Sorted List to Binary Search Tree的主要内容,如果未能解决你的问题,请参考以下文章

109. Convert Sorted List to Binary Search Tree

109. Convert Sorted List to Binary Search Tree

109. Convert Sorted List to Binary Search Tree

109. Convert Sorted List to Binary Search Tree

109. Convert Sorted List to Binary Search Tree

109. Convert Sorted List to Binary Search Tree