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 binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode * CreateNode(vector<int>&vals,int start,int end){ if(start>end)return NULL; int mid=(start+end)/2; TreeNode* ret=new TreeNode(vals[mid]); ret->left=CreateNode(vals,start,mid-1); ret->right=CreateNode(vals,mid+1,end); } TreeNode *sortedListToBST(ListNode *head) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> values; while(head!=NULL){ values.push_back(head->val); head=head->next; } return CreateNode(values,0,values.size()-1); } };