42.将有序数组转换为二叉搜索树(学习)
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵
 平衡
 二叉搜索树。
示例 1:
 
 输入:nums = [-10,-3,0,5,9]
 输出:[0,-3,9,-10,null,5]
 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
 
示例 2:
 
 输入:nums = [1,3]
 输出:[3,1]
 解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
提示:
 1 <= nums.length <= 104
 -104 <= nums[i] <= 104
 nums 按 严格递增 顺序排列
解析:
 一、基本情况处理:
 1.如果输入的数组nums为空(即长度为0),则没有元素可以构成树,因此返回null。
二、找到中间元素:
 1.使用Math.floor(nums.length / 2)计算数组的中间索引。由于数组索引是从0开始的,这个操作确保了我们总能找到中间位置的元素(如果数组长度是奇数)或两个中间位置元素中的一个(如果数组长度是偶数,这里我们选择靠左的那个)。
 2.将中间索引对应的元素值赋给根节点root。
三、递归构建子树:
 1.使用slice方法将数组分为两部分:左半部分(nums.slice(0, mid))和右半部分(nums.slice(mid + 1))。注意,这里mid + 1是因为slice的结束索引是不包含的,我们需要从中间元素的下一个位置开始截取右半部分。
 2.对左半部分数组递归调用sortedArrayToBST函数,将返回的结果作为根节点的左子树。
 3.对右半部分数组递归调用sortedArrayToBST函数,将返回的结果作为根节点的右子树。
四、返回根节点:
 1.完成上述步骤后,我们得到了一个以nums[mid]为根节点,左子树由左半部分数组构建,右子树由右半部分数组构建的平衡二叉搜索树。返回这个根节点。
var sortedArrayToBST = function (nums) {
    if (nums.length === 0) {
        return null;
    }
    // 找到数组的中间元素  
    const mid = Math.floor(nums.length / 2);
    const rootVal = nums[mid];
    const root = new TreeNode(rootVal);
    // 递归构建左子树和右子树  
    root.left = sortedArrayToBST(nums.slice(0, mid));
    root.right = sortedArrayToBST(nums.slice(mid + 1));
    return root;
};








![[图解]用例规约之扩展路径](https://i-blog.csdnimg.cn/direct/d6c40ca99ec34bf896f6da7b8aab6867.png)
![【题解】【高精度】—— [NOIP2003 普及组] 麦森数](https://i-blog.csdnimg.cn/direct/f2c059c789aa402384e6e664232cad7c.jpeg#pic_center)









