将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。
示例 1:

codeType
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

示例 2:

codeType
输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
提示:
- 1 <= nums.length <= 104
- -104 <= nums[i] <= 104
- nums 按 严格递增 顺序排列
解法
ts
/**
* Definition for a binary tree node.
* class TreeNode {
* val: number
* left: TreeNode | null
* right: TreeNode | null
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
* }
*/
function sortedArrayToBST(nums: number[]): TreeNode | null {
const buildTree = (start: number, end: number): TreeNode | null => {
// 递归终止:区间无效,无节点
if (start > end) return null;
// 1. 取区间中点,作为当前根节点
const mid = Math.floor((start + end) / 2);
// 2. 创建当前根节点
const root = new TreeNode(nums[mid]);
// 3. 递归构建左子树:左半区间
root.left = buildTree(start, mid - 1);
// 4. 递归构建右子树:右半区间
root.right = buildTree(mid + 1, end);
// 返回当前根节点
return root;
}
// 初始调用:整个数组区间 [0, len-1]
return buildTree(0, nums.length - 1);
};