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

相关推荐
呱呱巨基2 小时前
Linux 进程控制
linux·c++·笔记·学习
jghhh012 小时前
POCS(凸集投影)算法解决部分k空间数据缺失导致吉布斯伪影
算法
暖阳之下2 小时前
学习周报二十七
学习
罗湖老棍子2 小时前
最小函数值(minval)(信息学奥赛一本通- P1370)
数据结构·c++·算法··优先队列·
LYFlied2 小时前
【每日算法】LeetCode 4. 寻找两个正序数组的中位数
算法·leetcode·面试·职场和发展
长安er2 小时前
LeetCode 62/64/5/1143多维动态规划核心题型总结
算法·leetcode·mybatis·动态规划
一念一花一世界2 小时前
sourcefare零基础学习 - 使用自定义权限优化项目管理
学习·sonarqube·sourcefare·代码扫描工具
LYFlied2 小时前
【每日算法】LeetCode 208. 实现 Trie (前缀树)
数据结构·算法·leetcode·面试·职场和发展
代码游侠3 小时前
应用——MPlayer 媒体播放器系统代码详解
linux·运维·笔记·学习·算法