Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
answer:
class Solution {
public:
TreeNode* sortedListToBST(ListNode* head) {
if(head == NULL)
return NULL;
if(head->next == NULL)
return new TreeNode(head->val);
return myLTBT(head,NULL);
}
TreeNode * myLTBT(ListNode * start, ListNode * tail){
if(start == NULL || start == tail)
return NULL;
ListNode * mid = start, * temp = start;
while(temp != tail && temp->next != tail){
mid = mid->next;
temp = (temp->next)->next;
}
TreeNode * root = new TreeNode(mid->val);
root->left = myLTBT(start,mid);
root->right = myLTBT(mid->next,tail);
return root;
}
};