题目:
题解:
根据二叉搜索树特性,根节点左树都比根节点小,根节点右树都比根节点大,每次将数组按照中位数一分为二,左边的填充左树,右边的填充右树,左右子树高度要么相差(数组个数为基数),要么相差为1(数组个数为偶数)。
public TreeNode sortedArrayToBST(int[] nums) {
if (nums == null || nums.length == 0) {
return null;
}
if (nums.length == 1) {
return new TreeNode(nums[0]);
}
int mid = (nums.length - 1)/2;
TreeNode node = new TreeNode(nums[mid]);
node.left = sortedArrayToBST(Arrays.copyOfRange(nums, 0, mid));
node.right = sortedArrayToBST(Arrays.copyOfRange(nums, mid+1, nums.length));
return node;
}
时间复杂度:O(n)