news 2026/4/22 19:33:31

二叉排序树(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/4/23 13:01:44

lora_rank参数深度解析:4~16之间的选择对模型性能的影响

LoRA Rank 参数深度解析&#xff1a;4~16 区间内的性能权衡与工程实践 在当前大模型时代&#xff0c;如何用有限的算力资源完成个性化模型定制&#xff0c;是每一个开发者面临的现实挑战。全参数微调虽效果显著&#xff0c;但动辄上百GB显存的需求让大多数个人和中小团队望而却…

作者头像 李华
网站建设 2026/4/23 13:00:41

安防异常行为检测实战:基于YOLOv11的智能安防系统全流程指南

文章目录 安防异常行为检测实战:基于YOLOv11的智能安防系统全流程指南 引读 一、项目价值:为什么选择“安防异常行为检测+YOLOv11”? 二、技术基石:YOLOv11与安防异常行为检测的适配性 三、项目实战:从监控到系统的全流程构建 (一)环境搭建:零基础快速启动 (二)数据准…

作者头像 李华
网站建设 2026/4/10 17:52:55

工业质检新范式:基于YOLOv11的产线瑕疵与不合格品自动检测系统实战教程

文章目录 工业质检新范式:基于YOLOv11的产线瑕疵与不合格品自动检测系统实战教程 引读 一、项目价值:为什么选择“工业质检+YOLOv11”? 二、技术基石:YOLOv11与工业质检的天生适配 三、项目实战:从产线到系统的全流程构建 (一)环境搭建:零基础快速启动 (二)数据准备:…

作者头像 李华
网站建设 2026/4/22 13:08:23

基于YOLOv11的人头人肩人身检测系统:从密集场景到交互界面的全流程落地

文章目录 【安防毕设王牌】基于YOLOv11的人头人肩人身检测系统:从密集场景到交互界面的全流程落地 一、项目价值:为什么做人头人肩人身检测? 二、技术基石:YOLOv11在人体检测中的优势 三、数据集:从“找数据”到“喂饱模型” 1. 数据集去哪找? 2. 数据集怎么处理? 四、模…

作者头像 李华
网站建设 2026/4/23 13:53:25

可食用野生植物检测实战:基于YOLOv11的智能识别系统全流程指南

文章目录 可食用野生植物检测实战:基于YOLOv11的智能识别系统全流程指南 引读 一、项目价值:为什么选择“可食用野生植物检测+YOLOv11”? 二、技术基石:YOLOv11与可食用野生植物检测的适配性 三、项目实战:从植物到系统的全流程构建 (一)环境搭建:零基础快速启动 (二)…

作者头像 李华
网站建设 2026/4/23 13:46:01

Jupyter Notebook中运行HunyuanOCR的详细操作流程

Jupyter Notebook中运行HunyuanOCR的完整实践指南 在当前AI模型日益复杂、部署门槛不断抬升的背景下&#xff0c;如何让前沿技术真正“触手可及”&#xff0c;成为开发者和研究者关注的核心问题。尤其是在文档智能领域&#xff0c;传统OCR系统往往依赖多阶段流水线——文字检测…

作者头像 李华