码迷,mamicode.com
首页 > 其他好文 > 详细

109. Convert Sorted List to Binary Search Tree

时间:2018-08-26 00:03:13      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:search   递归   span   链表   时间   lis   指针   cas   思路   

和 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

标签:search   递归   span   链表   时间   lis   指针   cas   思路   

原文地址:https://www.cnblogs.com/hankunyan/p/9535805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!