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

相关推荐
多米Domi01137 分钟前
0x3f 第49天 面向实习的八股背诵第六天 过了一遍JVM的知识点,看了相关视频讲解JVM内存,垃圾清理,买了plus,稍微看了点确定一下方向
jvm·数据结构·python·算法·leetcode
微露清风7 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
阳光九叶草LXGZXJ8 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
biuyyyxxx8 小时前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
A_nanda10 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
丝斯201110 小时前
AI学习笔记整理(66)——多模态大模型MOE-LLAVA
人工智能·笔记·学习
军军君0111 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
代码雕刻家11 小时前
2.4.蓝桥杯-分巧克力
算法·蓝桥杯
bylander11 小时前
【AI学习】TM Forum《Autonomous Networks Implementation Guide》快速理解
人工智能·学习·智能体·自动驾驶网络
xxxmine11 小时前
redis学习
数据库·redis·学习