跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 二叉搜索树原理与性能分析

二叉搜索树(BST)的概念、性质及性能分析。BST 是一种特殊的二叉树,左子树节点值小于根节点,右子树节点值大于根节点。其查找、插入、删除操作在平均情况下时间复杂度为 O(logN),最坏情况下退化为链表时为 O(N)。相比暴力查找和二分查找,BST 在动态数据场景下更具优势,是学习 AVL 树和红黑树的基础。

竹影清风发布于 2026/3/28更新于 2026/6/328 浏览
C++ 二叉搜索树原理与性能分析

1. 二叉搜索树的概念

二叉搜索树(Binary Search Tree, BST)又称二叉排序树。它或者是一棵空树,或者是一棵具有以下性质的树:

  1. 如果它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值。
  2. 如果它的右子树不为空,则右子树上所有结点的值都大于等于根结点的值。
  3. 它的左右子树也分别为二叉搜索树。
  4. 二叉搜索树中可以支持插入相等的值,也可以不支持插入相等的值,这取决于具体的使用场景。本文讨论的二叉搜索树实现不支持插入相等的值。

文章配图

🌳 二叉搜索树的特性:

  1. 每个节点都带着唯一编号(键值)
  2. 左分拣区的所有包裹编号 < 当前包裹编号
  3. 右分拣区的所有包裹编号 > 当前包裹编号

📦 递归定义:

假设收到一个编号为50的包裹:

  • 如果当前货架是空的 ➔ 直接把这个包裹放上去
  • 如果货架上已有编号70的包裹 ➔ 把新包裹扔到左边货架区(因为 50<70)
  • 如果货架上已有编号30的包裹 ➔ 把新包裹扔到右边货架区(因为 50>30)

每个货架都会对后续包裹重复这个操作,最终形成这样的结构:

       [50]      /   \   [30]   [70]   /  \    /  \ [20][40][60][80]

⚡ 核心优势:

  • 闪电查找:找编号 63 的包裹?从 50→70→60→... 每次淘汰一半错误选项
  • 自动排序:中序遍历(左→中→右)直接输出有序序列
  • 动态更新:新增/删除包裹时,整个货架体系会自动重新组织路线

💣 常见误区:

 [50]  /   \ [30] [70]     /   \   [60] [80]   / [55]    // 合法!60>55 且 55>50?         // 不!虽然 55>50,但它出现在 70 的左子树里         // 而 55<70 是合法的,整体依然满足 BST 定义

❌ 这不是二叉搜索树:

   [50]  /   \ [30] [70]     /   \   [20] [80]  // 灾难!20 出现在 70 的左子树         // 但 20<50,应该在整个左半区

2. 二叉搜索树的性能分析

2.1. 样例对比

如果需要对一组数据进行搜索,常见的解法有:

1. 纯暴力求解

通过循环一个一个进行查找。如果数据恰巧在最后一个位置,则需要遍历整组数据,时间复杂度较高。对于新手来说较为友好,但在大数据量下效率低下。

2. 二分查找算法

时间复杂度为 O(logN),对比暴力求解已有很大提升。但该算法有个很大的局限性:数组必须是'有序'的。此外,二分算法在插入和删除数据时效率较低。

2.2. 二叉搜索树的价值

根据二叉搜索树的定义,左边的结点的数据小,右边的数据大。利用这一特性可以进行查找:如果查找的数比根节点小,则找左子树;反之则找右子树。

1. 最优情况: 二叉搜索树为完全二叉树(或接近完全二叉树),其高度为 log₂N,时间复杂度大致为 O(logN)。

2. 最差情况: 二叉搜索树退化为单支树(或类似单支),其高度为 N,时间复杂度大致为 O(N)。

文章配图

综合来看,二叉搜索树进行数据增删查的时间复杂度在平均情况下优于暴力查找,且比二分查找更灵活。大多数情况下我们遇不到最差的二叉搜索树。不过其实二叉搜索树也不是一颗比较完美的树,后期的 AVL 树和红黑树才算是真正意义上的比较完美的树,不过这些都是后话了。如果我们一上来就说 AVL 和红黑树,相信不少读者会觉得难以啃下。二叉搜索树作为它们的基础,可以为它们的学习打好基础。

当然,学习二叉搜索树不仅仅是为了理论知识,其实现也是重点。后续将介绍具体的代码实现细节。

目录

  1. 1. 二叉搜索树的概念
  2. 2. 二叉搜索树的性能分析
  3. 2.1. 样例对比
  4. 1. 纯暴力求解
  5. 2. 二分查找算法
  6. 2.2. 二叉搜索树的价值
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 Flutter 与 Python 的低延迟虚拟键盘实现方案
  • C++ 多态核心原理与虚函数表详解
  • 基于 Spring Boot 的中小型制造企业 ERP 系统设计与实现
  • 前端缓存策略实战:构建高性能 Web 应用
  • C++ 四十年演进史与基础入门指南
  • Python Web UI 自动化测试:推送本地代码到 Git 远程仓库
  • 国产 AI 智能体工具对比:腾讯、字节、阿里等主流平台汇总
  • C 语言实现面向对象编程的核心思想与示例
  • 前端开发一天通常能完成多少页面
  • AI 鉴伪技术解析:人脸视频、AIGC 图像及文档篡改检测
  • Windows Python 环境治理(EPGF)系列总览与阅读路线
  • 二分算法实战:A-B 数对与烦恼的高考志愿
  • 前端函数防抖详解:原理、手写实现与实战应用
  • SpringBoot 结合 Leaflet 实现天地图路径规划可视化实践
  • AI生成个性化故事视频:儿童/教育赛道爆款公式
  • IntelliJ IDEA 2025 中 Git Local Changes 面板消失问题修复
  • 基于 Flask 的语音转写 AI 总结:从 TXT 到 CSV 部署实践
  • 华为OD机试真题:日志解析算法题解
  • AI一键生成品牌广告视频:2026营销素材批量生产指南
  • GitHub Copilot 提示词工程指南:从基础到精通的 AI 编程协作

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online