每天学习一点算法 2025/12/22
题目:将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。
前几天才做了验证二叉搜索树,我们知道严格递增的有序数组,恰好是对应平衡二叉搜索树(BST)的中序遍历结果,那么根节点的值就是这个数组中间的那个数字,子树的根节点又是数组根节点值(也就是中间的值)处分割开后两边数组的中间值,那么我们可以递归生成子树的根节点从而生成完整的二叉搜索树。
typescript
function sortedArrayToBST(nums: number[]): TreeNode | null {
// 辅助函数:递归构建BST
function auxiliaryFun(nums: number[], start: number, end: number): TreeNode | null {
// 递归终止条件:区间无效
if (start > end) return null;
// 取左中位数,也可以取右中位数
const mid = start + Math.floor((end + start) / 2);
// 以中位数为根节点
const root = new TreeNode(nums[mid]);
// 递归构建左子树(左区间)
root.left = auxiliaryFun(nums, start, mid - 1);
// 递归构建右子树(右区间)
root.right = auxiliaryFun(nums, mid + 1, end);
return root;
}
// 初始调用:整个数组区间 [0, nums.length-1]
return auxiliaryFun(nums, 0, nums.length - 1);
}
题目来源:力扣(LeetCode)