news 2026/1/25 10:30:25

二叉排序树(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/1/3 15:11:51

揭秘AI原生应用领域用户画像的模型可解释性问题

从黑盒到透明&#xff1a;AI原生应用中用户画像的可解释性实践 一、为什么要聊AI原生应用的用户画像可解释性&#xff1f; 你有没有遇到过这样的场景&#xff1f; 打开一款AI原生社交APP&#xff0c;首页推荐的内容全是你完全不感兴趣的话题&#xff0c;你盯着屏幕疑惑&#xf…

作者头像 李华
网站建设 2026/1/19 4:33:07

国内加速下载HunyuanOCR模型的方法汇总(含清华源)

国内加速下载HunyuanOCR模型的方法汇总&#xff08;含清华源&#xff09; 在企业智能化转型的浪潮中&#xff0c;文档自动化处理正成为效率提升的关键突破口。无论是银行票据识别、跨境商品信息提取&#xff0c;还是政务文件数字化&#xff0c;光学字符识别&#xff08;OCR&am…

作者头像 李华
网站建设 2026/1/3 15:09:39

lora-scripts真实案例分享:方言语音识别模型微调过程详解

lora-scripts真实案例分享&#xff1a;方言语音识别模型微调过程详解 在智能语音助手几乎人手可用的今天&#xff0c;一个尴尬的问题依然存在&#xff1a;它们听不懂“家乡话”。无论是粤语里一句地道的“落雨收衫”&#xff0c;还是闽南语中“食未”的问候&#xff0c;通用语音…

作者头像 李华
网站建设 2026/1/6 2:15:19

negative prompt优化建议:提升lora-scripts训练后图像生成质量

negative prompt优化建议&#xff1a;提升lora-scripts训练后图像生成质量 在如今人人都能点几下鼠标就“训练出一个专属风格模型”的时代&#xff0c;LoRA 技术的普及让图像生成的门槛前所未有地降低。借助像 lora-scripts 这样的自动化训练工具&#xff0c;哪怕没有深厚深度学…

作者头像 李华
网站建设 2026/1/3 15:08:34

lora-scripts助力垂直领域大模型适配:医疗、法律、教育行业问答定制

LoRA-Scripts助力垂直领域大模型适配&#xff1a;医疗、法律、教育行业问答定制 在医院的智能导诊系统中&#xff0c;患者提问“孩子发烧38.5度该吃什么药&#xff1f;”如果AI回答“建议服用头孢克肟”&#xff0c;而未提示需医生确诊后再用药——这不仅误导用户&#xff0c;…

作者头像 李华
网站建设 2026/1/3 15:06:43

AI模型部署成本太高?试试仅1B参数的腾讯混元OCR解决方案

轻量化也能高性能&#xff1f;腾讯混元1B参数OCR如何破局AI部署成本困局 在智能文档处理日益普及的今天&#xff0c;企业对OCR技术的需求早已从“能识别文字”升级为“精准提取结构化信息”。然而现实却令人无奈&#xff1a;高精度OCR系统动辄需要多卡A100部署&#xff0c;推理…

作者头像 李华