将升序数组 转换成一棵**高度平衡二叉搜索树(AVL)**平衡定义:每个节点的左右子树高度差不超过 1。
为什么取中间?
- 数组升序
- 中间值作为根,左边一半都更小,右边一半都更大
- 左右子树节点数量几乎一样 → 天然平衡
这一步是这道题的灵魂。
- 用中间数字创建一个节点
- 它就是当前区间的树根
有序数组转平衡 BST = 递归分治 + 每次取中点做根
- 中点保证平衡
- 左小右大保证 BST
- 递归自动建好整棵树
完整代码实现:
java
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return build(nums, 0, nums.length - 1);
}
private TreeNode build(int[] nums, int left, int right) {
if (left > right) {
return null;
}
int mid = (left + right) / 2; // 获取数组中点
TreeNode root = new TreeNode(nums[mid]);
root.left = build(nums, left, mid - 1);
root.right = build(nums, mid + 1, right);
return root;
}
}