Total Accepted: 57775 Total Submissions: 198972 Difficulty: Medium
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: int getListNodeLength(ListNode* head) { int len = 0; while(head){ len++; head = head->next; } return len; } TreeNode* sortedListToBST(ListNode* head) { if(head==NULL){ return NULL; } if(head->next==NULL){ return new TreeNode(head->val); } int len = getListNodeLength(head); int cnt = len/2; ListNode* cur = head; while(--cnt){ cur = cur->next; } ListNode* mid = cur->next; ListNode* head2= mid->next; cur->next = NULL; mid->next = NULL; TreeNode* root = new TreeNode(mid->val); root->left = sortedListToBST(head); root->right = sortedListToBST(head2); return root; } };
Next challenges: (M) Convert Sorted Array to Binary Search Tree