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; } };