news 2026/5/8 17:12:17

二叉排序树(Binary Search Tree, BST)是一种重要的数据结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉排序树(Binary Search Tree, BST)是一种重要的数据结构

二叉排序树(Binary Search Tree, BST)是一种重要的数据结构,其定义如下:
一棵二叉树若满足以下性质,则称为二叉排序树:

  • 若左子树非空,则左子树上所有结点的值均小于根结点的值;
  • 若右子树非空,则右子树上所有结点的值均大于根结点的值;
  • 左、右子树本身也分别是二叉排序树。

这种结构使得中序遍历二叉排序树时,可以得到一个递增有序序列。

查找过程基于递归比较:
从根节点开始,将目标关键字与当前结点的关键字进行比较:

  • 相等 → 查找成功;
  • 目标值较小 → 在左子树中继续查找;
  • 目标值较大 → 在右子树中继续查找;
  • 若到达空指针,则表示查找失败。

存储结构通常采用二叉链表形式,C语言定义如下:

typedefstructTnode{intdata;// 结点关键字structTnode*lchild,*rchild;// 左、右孩子指针}BSTnode,*BSTree;

查找算法实现示例(返回目标结点,并记录父结点)

BSTnode*SearchBST(BSTree root,intkey,BSTnode*father,BSTnode**parent){if(root==NULL){*parent=father;returnNULL;// 查找失败}if(key==root->data){*parent=father;returnroot;// 查找成功}elseif(key<root->data){returnSearchBST(root->lchild,key,root,parent);// 向左查找}else{returnSearchBST(root->rchild,key,root,parent);// 向右查找}}

二叉排序树支持高效的动态操作,插入新结点时总作为叶子插入正确位置。但最坏情况下(如按序插入),树可能退化为链表,导致时间复杂度升至 O(n)。为此,引申出平衡二叉树(AVL)、红黑树等改进结构。

  1. 二叉排序树的插入操作实现
    插入操作本质上是查找失败后在合适位置创建新结点。从根开始,比较待插关键字与当前结点值:
  • 若小于当前结点值,进入左子树;
  • 若大于,则进入右子树;
  • 直到遇到空指针位置(即应插入的位置),分配内存并插入新结点。

C语言实现示例

BSTnode*InsertBST(BSTree root,intkey){if(root==NULL){BSTnode*newNode=(BSTnode*)malloc(sizeof(BSTnode));newNode->data=key;newNode->lchild=newNode->rchild=NULL;returnnewNode;// 返回新结点作为子树根}if(key<root->data)root->lchild=InsertBST(root->lchild,key);// 插入左子树elseif(key>root->data)root->rchild=InsertBST(root->rchild,key);// 插入右子树// 若相等,不插入(避免重复)returnroot;}
  1. 删除操作需考虑的三种情况
    删除一个结点时,必须保持二叉排序树的性质不变,分为以下三类:
  • 叶子结点(无左右子树):直接删除即可。
  • 仅有左子树或右子树:用其子树替代其位置。
  • 左右子树均存在:需找到中序前驱(左子树最大值)或中序后继(右子树最小值)来替换该结点,再递归删除替换结点。
  1. 中序遍历二叉排序树的结果
    中序遍历(左→根→右)会得到一个严格递增的有序序列。这是由二叉排序树的定义决定的,体现了其“排序”特性。

  2. 极端情况下性能下降的原因
    当数据按有序或接近有序的方式插入时(如连续插入 1, 2, 3, 4, 5),二叉排序树会退化为单链(类似线性表)。此时树的高度为 n,查找、插入、删除的时间复杂度退化为 O(n),失去了 O(log n) 的优势。

  3. 平衡二叉树对二叉排序树的优化方式
    平衡二叉树(如 AVL 树)通过维护每个结点的平衡因子(左右子树高度差 ≤ 1)来防止树过度倾斜。每当插入或删除导致不平衡时,通过旋转操作(LL、RR、LR、RL 四种)调整结构,确保树高始终接近 log n,从而保证所有操作在 O(log n) 时间内完成。

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

基于YOLOv11的焊缝缺陷智能检测系统:从算法到UI界面的全流程落地

文章目录 【工业检测毕设利器】基于YOLOv11的焊缝缺陷智能检测系统:从算法到UI界面的全流程落地 一、项目价值:为什么做焊缝缺陷检测? 二、技术基石:YOLOv11到底强在哪? 三、数据集:从“找数据”到“喂饱模型” 1. 数据集去哪找? 2. 数据集怎么处理? 四、模型训练:让Y…

作者头像 李华
网站建设 2026/5/3 0:16:48

病理切片分析新征程:利用YOLOv11实现自动化检测与UI界面集成

文章目录 病理切片分析新征程:利用YOLOv11实现自动化检测与UI界面集成 引言 一、YOLOv11概述 1.1 YOLOv11简介 1.2 YOLOv11在病理切片分析中的应用 二、数据集准备与处理 2.1 数据集选择 2.2 数据预处理与增强 2.3 数据集划分 三、YOLOv11模型训练与优化 3.1 环境搭建 3.2 配置…

作者头像 李华
网站建设 2026/4/18 2:21:42

车间智能监控:基于YOLOv11_8_10的人员与设备状态实时监测系统解析

文章目录 车间智能监控:基于YOLOv11_8_10的人员与设备状态实时监测系统解析 一、引言 二、项目目标与意义 三、技术选型与工具准备 1. 模型选择 2. 工具准备 四、数据准备与训练 1. 数据采集 2. 数据标注 3. 数据增强 4. 数据集划分 五、模型训练与调优 1. YOLOv11训练 2. YOL…

作者头像 李华
网站建设 2026/5/8 5:29:38

厨房工具识别系统:基于YOLOv11的从入门到实战全流程指南

文章目录 厨房工具识别系统:基于YOLOv11的从入门到实战全流程指南 引读:让厨房工具识别准确率突破92%的实用方案 一、项目基石:厨房工具识别的需求与技术选型 二、环境搭建:从依赖安装到代码准备 1. 必备依赖安装 2. YOLOv11代码仓库获取 三、数据准备:让模型“看懂”厨房…

作者头像 李华
网站建设 2026/5/8 5:29:29

野生动物智能入侵检测:基于YOLOv11的生态安全监测方案

文章目录 野生动物智能入侵检测:基于YOLOv11的生态安全监测方案 一、项目背景:为什么要做动物入侵智能检测? 二、系统架构:从监测到预警的全流程设计 三、数据准备:让模型“认识”野生动物 (1)数据集选择 (2)数据标注与格式 (3)数据集组织与配置 四、YOLOv11模型训练…

作者头像 李华
网站建设 2026/5/8 8:51:33

用腾讯混元OCR做视频字幕提取,准确率高达SOTA水平

用腾讯混元OCR做视频字幕提取&#xff0c;准确率高达SOTA水平 在短视频日活突破十亿、在线教育课程年增百万的今天&#xff0c;如何从海量视频中高效获取结构化文本信息&#xff0c;已经成为内容平台、媒体机构乃至个人创作者面临的核心挑战。尤其是字幕提取这一任务——看似简…

作者头像 李华