news 2026/7/12 13:28:36

二分法查找和BST树插入删除查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二分法查找和BST树插入删除查询

二分查找 vs 二叉搜索树(BST)
插入、删除、查询 三种操作对比

以下是二分查找(在有序数组上)和二叉搜索树(BST)在核心操作上的全面对比,方便你快速理解两者的区别与适用场景。

项目二分查找(有序数组)二叉搜索树(BST)时间复杂度对比(平均/最坏)空间复杂度是否支持动态维护
数据结构有序数组(静态)动态树结构
查找(Search)O(log n) / O(log n)O(log n) / O(n)平均相同,最坏BST退化成链表O(1) vs O(n)BST支持
插入(Insert)O(n)(需要移动元素保持有序)O(log n) / O(n)BST完胜O(1)额外 vs O(n)BST支持
删除(Delete)O(n)(移动元素)O(log n) / O(n)BST完胜O(1)额外 vs O(n)BST支持
顺序访问(中序遍历)O(n)(直接遍历数组)O(n)(中序遍历)相同
找前驱/后继O(log n) 或 O(1)(相邻元素)O(log n) 或 O(h)(最坏O(n))差不多,但BST更灵活BST更自然
范围查询O(log n + k)(找到起点后线性扫描k个)O(log n + k)(中序遍历一段)理论相同,实际BST常稍慢
内存使用连续内存,极佳缓存友好节点分散,缓存不友好(跳跃访问)数组完胜O(n) vs O(n)
实现复杂度非常简单中等(特别是删除要处理多种情况)数组更简单
是否需要额外空间通常不需要(原地操作)每个节点需要左右指针 + 值数组更省空间
适用场景数据静态、只读或很少修改、追求极致性能数据频繁增删改查、需要动态维护有序性

核心操作时间复杂度总结表(最常用版本)

操作二分查找(数组)普通BST平衡BST(AVL/红黑树)备注
查找O(log n)O(log n) ~ O(n)O(log n)最坏情况差别巨大
插入O(n)O(log n) ~ O(n)O(log n)数组插入代价极高
删除O(n)O(log n) ~ O(n)O(log n)同上
空间局部性极好较差较差缓存命中率差异明显
代码量非常少中等较多平衡树实现复杂很多

快速决策指南(2025-2026年真实场景)

你应该选择哪种?

情况推荐数据结构主要理由
数据基本不变,只查询有序数组 + 二分查找最快、最省空间、缓存友好
数据偶尔插入/删除,但量不大有序数组(接受O(n)插入)简单、性能仍很好
数据频繁增删查,n在几千~几百万平衡BST(红黑树)综合性价比最高
极致性能要求 + 数据量极大 + 频繁修改跳表 / B+树 / LSM树超越普通BST的实际选择
需要范围查询 + 频繁修改平衡BST 或 跳表中序遍历很自然
教学/面试/算法题先写普通BST,再说平衡树考察基础理解

最容易混淆的几个点(面试常考)

  1. 二分查找能不能做插入/删除?
    可以,但代价是O(n),所以实际工程中几乎不用数组做频繁插入删除。

  2. BST删除节点有几种情况?

    • 没孩子 → 直接删
    • 只有一个孩子 → 用孩子顶替
    • 有两个孩子 → 找后继(或前驱)替换值,再删后继(后继一定最多一个右孩子)
  3. 为什么很多生产环境不用普通BST?
    因为最坏情况退化成链表,时间变成O(n),风险太大。

  4. 现代语言里用什么实现有序动态集合最多?

    • Java → TreeMap/TreeSet(红黑树)
    • C++ → std::map / std::set(红黑树)
    • Python → 基本不用自带BST(SortedDict第三方)
    • Go → 基本不用(社区有平衡树实现)

一句话总结:

二分查找追求的是静态数据下的极致查询性能
BST(尤其是平衡BST)追求的是动态数据下的均衡增删查性能

你目前更想深入哪个部分?

  • 二分查找的各种变种写法与边界陷阱
  • 普通BST的完整插入/删除代码实现(带图示)
  • BST退化为链表的几种典型构造方式
  • 如何手写一个简易红黑树(或理解红黑树性质)
  • 跳表 vs BST vs 红黑树 vs B+树实际对比

欢迎告诉我你的具体需求~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 13:08:43

强烈安利8个AI论文工具,继续教育学生轻松搞定论文写作!

强烈安利8个AI论文工具,继续教育学生轻松搞定论文写作! AI 工具如何改变论文写作的未来 在当前的学术环境中,越来越多的继续教育学生面临论文写作的压力。无论是撰写开题报告、撰写初稿,还是进行查重和降重,每一步都可…

作者头像 李华
网站建设 2026/7/7 12:46:11

VP引导定位软件-定位纠偏(不带角度)

VP引导定位软件-定位纠偏(不带角度)// 定位模式if(GlobalParamters.SoftModel1){// 一 获取圆的中心AlgorithmService.Instance.DetectCircle(info.Image, out double ImageX, out double ImageY);// 二 获取目标位置TargetLoaction targetLoaction (Ta…

作者头像 李华
网站建设 2026/7/1 0:35:47

基于SpringBoot的房屋交易平台的设计与实现(11712)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/7/6 14:40:53

基于MATLAB的IIR FIR滤波器的设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于MATLAB的IIR FIR滤波器的设计(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 以及音频去噪功能的实现,包括对滤波器函数进行时频域分析,对音频进行加高频噪声或高斯噪声,对加噪音频进行…

作者头像 李华
网站建设 2026/7/6 13:52:44

流水线调度柔性作业车间调度(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

流水线调度 柔性作业车间调度 内容: 提供各类调度问题解决方案,包括作业车间调度JSP、柔性作业车间调度 FJSP、流水车间调度FSP、混合流水车间调度HFSP、多目标优化、动态调度、蒙特卡洛模拟、机器分配与序列排序等 算法库齐全,遗传算法、蚁群…

作者头像 李华
网站建设 2026/7/6 10:56:43

软件测试技术报告(源码+测试报告)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

软件测试技术报告(源码测试报告)(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 项目名:旅游景点推荐平台( web) 测试需求分析详细、测试用例设计多样、涉及黑盒测试…

作者头像 李华