Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
Example
二叉树中序遍历后可得到递增序列,同理,由递增序列可得到二叉树。这里采用从下向上计算的方法构建二叉树,这样可以利用linked list有序这一特征。
2
1->2->3 => / \
1 3
public class Solution {
/**
* @param head: The first node of linked list.
* @return: a tree node
*/
private ListNode curr = null;
public TreeNode sortedListToBST(ListNode head) {
int length = getLength(head);
curr = head;
return helper(0, length - 1);
}
TreeNode helper(int start, int end) {
if(start > end) return null;
int mid = (start + end) / 2;
TreeNode left = helper(start, mid - 1);
TreeNode root = new TreeNode(curr.val);
curr = curr.next;
TreeNode right = helper(mid + 1, end);
root.left = left;
root.right = right;
return root;
}
int getLength(ListNode head) {
int res = 0;
while(head != null) {
res ++;
head = head.next;
}
return res;
}
}