【每天学习一点算法 2025/12/22】将有序数组转换为二叉搜索树

每天学习一点算法 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)

相关推荐
默默开发40 分钟前
完整版:本地电脑 + WiFi 搭建 AI 自动炒股 + 自我学习系统
人工智能·学习·电脑
for_ever_love__42 分钟前
Objective-C学习 NSSet 和 NSMutableSet 功能详解
开发语言·学习·ios·objective-c
仰泳的熊猫4 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
无极低码7 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发7 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
superior tigre8 小时前
22 括号生成
算法·深度优先
盐水冰9 小时前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
Hello小赵9 小时前
视频压缩编码学习(一)—— 基础知识大集合
学习
努力也学不会java9 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试