news 2026/4/25 0:34:33

【Hot 100 刷题计划】 LeetCode 108. 将有序数组转换为二叉搜索树 | C++ 分治法详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Hot 100 刷题计划】 LeetCode 108. 将有序数组转换为二叉搜索树 | C++ 分治法详解

LeetCode 108. 将有序数组转换为二叉搜索树

📌 题目描述

题目级别:简单

给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。
高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。

  • 示例 1:
    输入:nums = [-10,-3,0,5,9]
    输出:[0,-3,9,-10,null,5](答案不唯一,平衡即可)

💡 破题思路:分治与二分法

这道题的核心在于:如何保证“高度平衡”?

因为数组已经是升序排列的,如果我们想让左右子树的节点数量尽可能接近(从而保证高度平衡),最简单的方法就是:

  1. 取中点:将数组中间的元素作为当前子树的根节点。
  2. 划分子问题
    • 中点左侧的所有元素,递归地构建成左子树。
    • 中点右侧的所有元素,递归地构建成右子树。
  3. 递归终止:当区间左边界大于右边界时,说明这一侧已经没有元素了,返回空。

这种思路本质上就是二分查找的变种,由于我们总是从中间劈开,左右两边的节点数差值最多为 1,天然满足高度平衡的定义。


💻 C++ 代码实现 (修复引用性能版)

classSolution{public:TreeNode*sortedArrayToBST(vector<int>&nums){// 传入左右边界 [0, n-1]returndfs(nums,0,nums.size()-1);}// 💡 重点:vector<int>& nums 必须加引用,避免每一层递归都拷贝整个数组导致 TLE/MLETreeNode*dfs(vector<int>&nums,intl,intr){// 递归终止条件:区间无效if(l>r)returnnullptr;// 选择中间位置的数字作为根节点// 使用 l + (r - l) / 2 防止 (l + r) 溢出intmid=l+(r-l)/2;TreeNode*root=newTreeNode(nums[mid]);// 递归构建左子树,区间变为 [l, mid - 1]root->left=dfs(nums,l,mid-1);// 递归构建右子树,区间变为 [mid + 1, r]root->right=dfs(nums,mid+1,r);returnroot;}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 0:34:31

从欧氏距离到聚类中心:手把手实现K-means算法核心模块

1. 理解K-means算法的核心思想 第一次接触K-means算法时&#xff0c;我被它简洁而强大的特性所吸引。这是一种无监督学习算法&#xff0c;能够自动将数据分成K个不同的簇。想象你有一堆未分类的彩色珠子&#xff0c;K-means就像是一个智能分类器&#xff0c;能自动把颜色相近的…

作者头像 李华
网站建设 2026/4/25 0:31:02

别再踩坑了!Windows下用conda装PyTorch GPU版,保姆级版本匹配避坑指南

Windows深度学习环境搭建&#xff1a;PyTorch GPU版终极避坑手册 刚接触深度学习的开发者&#xff0c;90%的时间都花在了环境配置上。尤其当你在Windows系统下尝试用conda安装PyTorch GPU版本时&#xff0c;版本兼容性问题就像一道无形的墙。本文将彻底解决这个痛点——我们不…

作者头像 李华
网站建设 2026/4/25 0:18:39

AI短视频一键生成工具:从零搭建短剧创业平台

温馨提示&#xff1a;文末有资源获取方式随着Sora2、可灵、即梦等AI模型的持续升级&#xff0c;AI短剧迎来了真正的创作元年。数据显示&#xff0c;2025年国内短剧相关企业已近10万家&#xff0c;市场规模突破1000亿&#xff0c;同比增长40%。更值得关注的是&#xff0c;AI技术…

作者头像 李华