作者:disappearedgod
时间:2014-8-19
Convert Sorted List to Binary Search Tree
Total Accepted: 16590 Total Submissions: 61016 My SubmissionsGiven a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
解法
/**
* 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) {
if(head == null)
return null;
int length = 0;
ListNode p = head;
for(; p != null; p = p.next){
length++;
}
return sortedListToBST(head, 0, length-1);
}
public TreeNode sortedListToBST(ListNode head,int low, int high) {
if(low > high)
return null;
ListNode p = head;
int mid = low + (high - low) / 2;
for(int i = low; i < mid ; i++){
p = p.next;
}
TreeNode t = new TreeNode(p.val);
t.left = sortedListToBST(head, low, mid-1);
t.right = sortedListToBST(p.next, mid+1,high);
return t;
}
}