题目要求的是高度平衡的二叉搜索树,故每个节点应该取所在区间的中间节点。就跟二分查找一样。首先用整个数字的中间位置(下标基座mid)的数生成根结点root,然后找mid左边即0到mid-1的中间位置的元素生成root的左子节点,mid右边的即mid+1到len中间的生成root的右子节点,并在每一次区中间元素时修改区间范围。以此类推,递归即可。
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
int len = nums.length;
return fun(nums,0,len-1);
}
public TreeNode fun(int[] arr,int from,int to){
if(from==to)
return new TreeNode(arr[from]);
if(from>to){
return null;
}
int mid = (from+to)>>1;
TreeNode root = new TreeNode(arr[mid]);
root.left = fun(arr,from,mid-1);
root.right = fun(arr,mid+1,to);
return root;
}
}
要注意的是,第二个终止条件,即from>to。这个条件写不好会导致栈溢出(相当于进入死循环)。