Leetcode 108、将有序数组转换为二叉搜索树
递归
- 由题目可知,给定的数组为有序数组,目标是二叉平衡树,为了让树是平衡的,当前子树的根节点的左右两棵子树的高度差不可以超过1
- 因为是有序数组,所有有序数组的中点为根节点,中点左边是左子树,中点右边是右子树
- 可以得到下面的递归代码
class Solution {
TreeNode root = null;
public TreeNode sortedArrayToBST(int[] nums) {
int start = 0, end = nums.length - 1;
if(start <= end) {
int mid = (end - start) / 2 + start;
root = insert(root, nums[mid]);
sortedArrayToBST(Arrays.copyOfRange(nums, start, mid));
sortedArrayToBST(Arrays.copyOfRange(nums, mid + 1, end + 1));
}
return root;
}
public TreeNode insert(TreeNode root, int num) {
if(root == null) {
root = new TreeNode(num);
return root;
}
if(num <= root.val) {
root.left = insert(root.left, num);
}else{
root.right = insert(root.right, num);
}
return root;
}
}