题意:将一个有序数组转化为一棵平衡二分搜索树
算法思路:我们可以将一个有序数组不断往中间切分,中间值就是根结点,其左右子树结点个数相等或相差1,然后它的左半部分和右半部分按照相同的方式切分下去,左半部分挂在左子树上,右部分挂在右子树上,这样需要用一个标记区别左右子树。
我在leetcode上提交的结果,挺满意的,分享下:Runtime: 1 ms, faster than 99.17% of Java online submissions for Convert Sorted Array to Binary Search Tree.
附上代码:
//leetcode 108. Convert Sorted Array to Binary Search Tree
public TreeNode sortedArrayToBST(int[] nums) {
if(nums.length==0)
return null;
int len = nums.length-1;
int mid = len/2;
TreeNode root = new TreeNode(nums[mid]);
//false 表示往左分,true表示往右分
binSort(nums, 0, mid-1,root,false);
binSort(nums, mid+1, len,root,true);
return root;
}
public void binSort(int[] nums,int l,int r,TreeNode root,boolean flag){
if(l<=r){
int mid = (l+r)/2;
if(flag){
root.right = new TreeNode(nums[mid]);
binSort(nums, l, mid-1,root.right,false);
binSort(nums, mid+1,r,root.right,true);
}else{
root.left = new TreeNode(nums[mid]);
binSort(nums, l, mid-1,root.left,false);
binSort(nums, mid+1,r,root.left,true);
}
}
}