Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
Java:
1. 不多说,递归+二分法
水印人生: http://gongxuns.blogspot.com/2012/12/leetcodeconvert-sorted-array-to-binary.html
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedArrayToBST(int[] num) {
// Start typing your Java solution below
// DO NOT write main() function
if(num.length==0) return null;
return sortedArrayToBST(num,0,num.length-1);
}
public TreeNode sortedArrayToBST(int[] num, int start, int end){
if(start>end) return null;
int mid=(start+end)/2;
TreeNode res = new TreeNode(num[mid]);
res.left=sortedArrayToBST(num,start,mid-1);
res.right=sortedArrayToBST(num,mid+1,end);
return res;
}
}
2. http://blog.youkuaiyun.com/u013027996/article/details/21323449
public class Solution {
public TreeNode sortedArrayToBST(int[] num) {
if (num == null || num.length == 0) {
return null;
}
int len = num.length;
return createBSTree(num, 0, len - 1);
}
private TreeNode createBSTree(int[] num, int low, int high) {
if (low > high) {
return null;
}
if (low == high) {
return new TreeNode(num[low]);
}
int mid = (low + high) >> 1;
TreeNode root = new TreeNode(num[mid]);
root.left = createBSTree(num, low, mid - 1);
root.right = createBSTree(num, mid + 1, high);
return root;
}
}