参考:http://leetcode.com/2010/11/convert-sorted-list-to-balanced-binary.html
方法一,自顶向下,与 Convert Sorted Array to Balanced Binary Search Tree (BST) 相同。由于list不能随机访问,因此找到mid元素必须遍历半个list,时间复杂度为O(nlogn)。
方法二,自底向上,构造节点的顺序与List中元素的顺序相同。时间复杂度O(n),空间O(n)。
class Solution {
public:
TreeNode *sortedListToBST(ListNode *head) {
int len = 0;
ListNode *p = head;
while(p) {
len++;
p = p->next;
}
return convert(head, 0, len-1);
}
TreeNode *convert(ListNode *&head, int start, int end) {
if(start > end) return NULL;
int mid = start+(end-start)/2;
TreeNode *left = convert(head, start, mid-1);
TreeNode *root = new TreeNode(head->val);
root->left = left;
head = head->next;
root->right = convert(head, mid+1, end);
return root;
}
};