题目
给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。
示例
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-height-tree-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:递归
和 力扣 108. 将有序数组转换为二叉搜索树 差不多,不过题目要求有一些不同,所以对mid的处理也不同。
Java实现
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
int n = nums.length;
return build(nums, 0, n - 1);
}
public TreeNode build(int[] nums, int l, int r) {
if (l > r) return null;
int mid = l + r + 1 >> 1;
TreeNode root = new TreeNode(nums[mid]);
root.left = build(nums, l, mid - 1);
root.right = build(nums, mid + 1, r);
return root;
}
}