leetcode 109 Convert Sorted List to Binary Search Tree

1. 

class Solution {
public:
    TreeNode* sortedListToBST(ListNode* head) {
        vector<int> vec;
        while(head) {
            vec.push_back(head->val);
            head=head->next;
        }
        TreeNode* node=dich(vec,0,vec.size()-1);
        return node;
    }
    
    TreeNode* dich(vector<int>& vec,int left,int right) {
        if(left>right) return nullptr;
        int mid=left+(right-left)/2;
        TreeNode* node=new TreeNode(vec[mid]);
        node->left=dich(vec,left,mid-1);
        node->right=dich(vec,mid+1,right);
        return node;
    }
};

2. 

class Solution {
public:
    TreeNode* sortedListToBST(ListNode* head) {
        if(!head) return nullptr;
        ListNode *pre=nullptr,*slow=head,*fast=head;
        while(fast&&fast->next) {
            pre=slow;
            slow=slow->next;
            fast=fast->next->next;
        }
        TreeNode *node=new TreeNode(slow->val);
        if(!pre) return node;
        pre->next=nullptr;
        node->left=sortedListToBST(head);
        node->right=sortedListToBST(slow->next);
        return node;
    }
};
原文地址:https://www.cnblogs.com/LiuQiujie/p/12656878.html