Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
class Solution {
public:
TreeNode *sortedListToBST(ListNode *head) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> num;
while(head!=NULL){
num.push_back(head->val);
head=head->next;
}
if(num.size()==0)
return NULL;
TreeNode *root=Build(0,num.size()-1,num);
return root;
}
TreeNode *Build(int i , int j , vector<int> &num){
if(i>j)
return NULL;
int middle=(j-i+1)/2;
TreeNode *root=new TreeNode(num[middle+i]);
TreeNode *left=Build(i,i+middle-1,num);
TreeNode *right=Build(i+middle+1,j,num);
root->left=left;
root->right=right;
return root;
}
};