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 *sortedListToBST(ListNode *head) { int size=0; ListNode* p=head; while(p!=NULL) { size++; p=p->next; } return generate(head,size); } TreeNode* generate(ListNode* head,int size) { if(head==NULL || size==0) return NULL; int index=(size+1)/2; ListNode* p=head; for(int i=1;i<index;i++) p=p->next; TreeNode* root=new TreeNode(p->val); root->left=generate(head,index-1); root->right=generate(p->next,size-index); return root; } };