news 2026/9/18 5:25:28

二分法查找和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/9/17 17:45:56

基于MATLAB的单相接地故障自动重合闸仿真系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于MATLAB的单相接地故障自动重合闸仿真系统设计(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 本设计包括设计报告,仿真工程。 目前我国的远距离输配电系统(220~1000kv)架空线路上&#…

作者头像 李华
网站建设 2026/9/17 17:10:46

数据库存储引擎与索引技术深度解析

数据库存储引擎概述 数据库存储引擎(Storage Engine)是数据库管理系统(DBMS)中负责数据存储、检索和管理的核心组件。它决定了数据如何在磁盘或内存中组织、如何处理读写操作,以及如何支持事务、并发控制等特性。不同…

作者头像 李华
网站建设 2026/9/17 17:45:56

C#字典(Dictionary)全面解析:从基础用法到实战优化

C# Dictionary<TKey, TValue> 全面解析 从基础用法 → 内部原理 → 常见陷阱 → 性能优化 → 实战场景选择 1. Dictionary 基础用法速览&#xff08;最常用写法&#xff09; // 声明与初始化&#xff08;最推荐的几种写法&#xff09; var dict1 new Dictionary<st…

作者头像 李华
网站建设 2026/9/17 5:46:55

2026国产运维监控系统新格局--深度解析与选型指南

在信创产业全面替代与数字化转型深度耦合的2026年&#xff0c;中国企业运维监控系统的战略价值已从“技术支撑工具”跃升为“业务连续性保障中枢”。随着国产化生态从“可用”向“好用”进化&#xff0c;企业选型逻辑正经历根本性转变&#xff1a;既要满足信创合规的硬性门槛&a…

作者头像 李华