当前位置: 首页 > news >正文

LeetCode-hot100——将有序数组转换为二叉搜索树

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

题目链接:将有序数组转换为二叉搜索树

题目分析

本题要求将一个升序排列的整数数组转换为一棵平衡二叉搜索树。平衡二叉搜索树需满足两个条件:

  • 是二叉搜索树:对于树中任意节点,其左子树所有节点值小于它,右子树所有节点值大于它。
  • 是平衡树:左右子树的高度差不超过 1。

解题思路(分治思想)

利用数组升序排列的特性,采用分治策略构建平衡二叉搜索树:

  1. 选中间元素为根:将数组中间位置的元素作为当前子树的根节点,这样能保证左右子树节点数量尽可能相等,初步实现 “平衡”。
  2. 递归构建左右子树
    • 根节点左子树:由数组左半部分([左边界, 中间位置 - 1])递归构建。
    • 根节点右子树:由数组右半部分([中间位置 + 1, 右边界])递归构建。

代码详解

class Solution {
public:// 递归函数:将 nums[l...r] 转换为平衡二叉搜索树TreeNode* seek(vector<int>& nums, int l, int r) {// 递归终止条件:区间无效(l > r),返回空节点if (l > r) return nullptr;// 取中间位置元素作为根节点int mid = (l + r) / 2;TreeNode* root = new TreeNode(nums[mid]);// 递归构建左子树(左半区间 [l, mid - 1])root->left = seek(nums, l, mid - 1);// 递归构建右子树(右半区间 [mid + 1, r])root->right = seek(nums, mid + 1, r);return root;}// 主函数:调用递归,初始区间为 [0, nums.size() - 1]TreeNode* sortedArrayToBST(vector<int>& nums) {return seek(nums, 0, static_cast<int>(nums.size() - 1));}
};

图解样例

以 nums = [-10, -3, 0, 5, 9] 为例10

初始数组:

索引: 0   1   2   3   4
值:  -10 -3  0   5   9

构建根节点(整体区间 [0,4])

  • 计算中间位置:mid = (0+4)/2 = 2,对应值 0
  • 根节点为 0
  • 左子树区间:[0,1](元素:-10, -3)
  • 右子树区间:[3,4](元素:5, 9)
      0/ \
[0,1]  [3,4]

构建左子树(区间 [0,1])

  • 计算中间位置:mid = (0+1)/2 = 0,对应值 -10
  • 该节点作为根节点的左孩子
  • 左子树区间:[0,-1](无效,为空)
  • 右子树区间:[1,1](元素:-3)
      0/ \-10 [3,4]/  \空  [1,1]

构建左子树的右子树(区间 [1,1])

  • 计算中间位置:mid = 1,对应值 -3
  • 该节点作为 -10 的右孩子
  • 左右子树区间均无效(为空)
      0/ \-10 [3,4]/  \空   -3/  \空   空

构建右子树(区间 [3,4])

  • 计算中间位置:mid = (3+4)/2 = 3,对应值 5
  • 该节点作为根节点的右孩子
  • 左子树区间:[3,2](无效,为空)
  • 右子树区间:[4,4](元素:9)
      0/  \-10   5/ \   / \空 -3 空 [4,4]/  \空   空

构建右子树的右子树(区间 [4,4])

  • 计算中间位置:mid = 4,对应值 9
  • 该节点作为 5 的右孩子
  • 左右子树区间均无效(为空)
      0/  \-10   5/  \    \空   -3    9/  \   / \空   空 空 空

最终平衡二叉搜索树结构

        0/ \-10  5\  \-3  9

反思

为什么这样构建是平衡的?

  • 根节点 0 的左子树高度为 2,右子树高度为 2,差值为 0
  • 节点 -10 的左子树高度为 0,右子树高度为 1,差值为 1
  • 节点 5 的左子树高度为 0,右子树高度为 1,差值为 1
  • 所有节点的左右子树高度差都不超过 1,满足平衡二叉树的定义

通过这种 "选择中间元素作为根节点" 的分治策略,我们确保了构建出的二叉搜索树是平衡的,因为每次都会将当前区间均匀地分成两部分。

http://www.dtcms.com/a/414856.html

相关文章:

  • 网站速度对seo的影响修改wordpress登录背景图片
  • Kimi 灰度测试 OK Computer,AI 从 “问答” 迈入 “执行” 新阶段​
  • 什么是 mmap?
  • 民宿客用网络升级方案:从传统到现代化的跃迁
  • 湖南省住房和城乡建设厅老网站做网站分为竞价和优化
  • 品牌创意网站建设韩国手机网站模板
  • 力扣3679. 使库存平衡的最少丢弃次数
  • LeetCode:75.前K个高频元素
  • MySQL 基础指令全解析:从入门到熟练操作
  • 南华 NHZ-03/10/13 型滚筒反力式制动检验台:传统制动检测的核心设备
  • 企业网站开发注册网站开发目录结构
  • 做网站哪个公司好 快选宁陵建站宝互联网行业简介
  • cloudfared 内网穿透通过docker方式遇到的问题
  • 利用汇出与汇入函式协助自动化程式开发
  • iis网站域名访问辽宁工程招标网信息平台
  • 网站开发模板系统myphoto wordpress 国外
  • UART,IIC,SPI串行通信优缺点
  • debian12 安装pve
  • DM存储过程和函数中常用的变量、循环、游标、抛出异常
  • php网站开发怎么样西安网站维护 策划
  • 写csv测试
  • 网站访问不了的原因app运营
  • 一种物联网的节水灌溉系统(论文+源码)
  • 配置AC5(ARM Compiler 5)编译器
  • 合肥中科大网站开发wordpress5.0版本恢复到旧版本
  • 网站开发人员要求仿中国加盟网站源码
  • MySQL InnoDB持久化统计信息详解
  • 深入解析MySQL InnoDB Purge机制
  • 网站公司建立wordpress 分页不出来
  • 做英文的小说网站有哪些网站入口你会回来感谢我的