给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。
//因为数组是顺序递增数组,而且又要生成高度平衡的二叉搜索树(排序树),所以需要每次在数组中间取值生成节点,两边的数作为left和right
//这里就可以联系到二分查找,每次都找中间的值,然后两边的进行递归
public TreeNode sortedArrayToBST(int[] nums) {
int length = nums.length-1;
return create(0,length,nums);
}
public TreeNode create(int left,int right,int[] nums){
if (left > right) return null;//递归终止条件
int mid = (left + right) / 2;//得到中间值
TreeNode midNode = new TreeNode(nums[mid]);//生成中间值节点
midNode.left = create(left,mid-1,nums);//递归得到节点的左子树
midNode.right = create(mid+1,right,nums);//递归得到递归的右子树
return midNode;
}