题目:
Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* sortedListToBST(ListNode* head) {
if(head==nullptr)
return nullptr;
int len=0;
ListNode* cur=head;
while(cur)
{
++len;
cur=cur->next;
}
return sortedListToBST(head,0,len-1);
}
TreeNode* sortedListToBST(ListNode* &head,int begin,int end)
{
if(begin>end)
return nullptr;
if(begin==end)
{
TreeNode* root=new TreeNode(head->val);
head=head->next;
return root;
}
int mid=begin+(end-begin)/2;
TreeNode* leftchild=sortedListToBST(head,begin,mid-1);
TreeNode* root=new TreeNode(head->val);
head=head->next;
root->left=leftchild;
root->right=sortedListToBST(head,mid+1,end);
return root;
}
};