Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
由于已经有序,所以利用二分法创建这棵平衡二叉树,与Sort List类似
需要注意的就是一条链的后半条链的索引范围是[0,high - mid - 1],原来一直纠结在high - mid;
其次,就是注意后半条链的链头。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; next = null; }
* }
*/
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedListToBST(ListNode head) {
int len = 0;
ListNode p = head;
while(p != null){
len++;
p = p.next;
}
return create(head,0,len - 1);
}
public TreeNode create(ListNode head, int low , int high){
if(low > high ){
return null;
}
int mid = (low + high) >> 1;
int count = 0;
ListNode p = head;
while(count < mid){
p = p.next;
count++;
}
TreeNode t = new TreeNode(p.val);
t.left = create(head,0,mid-1);
t.right = create(p.next,0,high - mid - 1);
return t;
}
}
Runtime: 281 ms