package problems.medium;
import problems.utils.ListNode;
import problems.utils.TreeNode;
/**
* Created by sherxon on 1/5/17.
*/
public class ConvertSortedListtoBinarySearchTree {
/**
* Divide List recursively into two parts by finding middle with two pointers, then do merge
*/
public TreeNode sortedListToBST(ListNode head) {
if (head == null) return null;
ListNode slow = head;
ListNode fast = head;
ListNode prev = null;
while (fast != null && fast.next != null) {
fast = fast.next.next;
prev = slow;
slow = slow.next;
}
if (prev != null) prev.next = null; // break the link
else head = null;
TreeNode root = new TreeNode(slow.val);
root.left = sortedListToBST(head);
root.right = sortedListToBST(slow.next);
return root;
}
}