o(nlogn)
public class Solution {
public TreeNode sortedListToBST(ListNode head) {
// Start typing your Java solution below
// DO NOT write main() function
if(head == null) return null;
ListNode c1 = head, c2 = head;
ListNode c3 = new ListNode(0);
c3.next = head;
while(c2 != null && c2.next != null){
c2 = c2.next.next;
c1 = c1.next;
c3 = c3.next;
}
TreeNode root = new TreeNode(c1.val);
root.right = sortedListToBST(c1.next);
c3.next = null;
if(c1 == head) head = null;
root.left = sortedListToBST(head);
return root;
}
}
o(n)
public TreeNode sortedListToBST(ListNode head) {
if(head==null) return null;
ListNode countlen=head;
int len=0;
while(countlen!=null){ countlen=countlen.next;len++;}
return sortedList(head,0,len-1);
}
public TreeNode sortedList(ListNode head, int start, int end){
if(start>end) return null;
int mid=start+(end-start)/2;
TreeNode left=sortedList(head,start, mid-1);
TreeNode root= new TreeNode(head.val);
root.left=left;
if(head.next != null){
head.val = head.next.val;
head.next = head.next.next;
}
root.right=sortedList(head, mid+1, end);
return root;
}