和数组一样,设置[from,to),索引,递归:
public TreeNode sortedListToBST(ListNode head) {
return sortedListToBST(head, null);
}
public TreeNode sortedListToBST(ListNode begin, ListNode end) {
if (begin == end) {
return null;
}
if (begin.next == end) {
return new TreeNode(begin.val);
}
ListNode slow = begin, fast = begin;
while (fast != end && fast.next != end) {
slow = slow.next;
fast = fast.next.next;
}
TreeNode result = new TreeNode(slow.val);
result.left = sortedListToBST(begin, slow);
result.right = sortedListToBST(slow.next, end);
return result;
}