news 2026/4/16 14:01:35

二叉排序树(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/16 16:49:56

lora-scripts能否运行在Mac M系列芯片上?实测反馈

LoRA 训练平民化&#xff1a;Mac M系列芯片能否跑通 lora-scripts&#xff1f;实测分析 在AI生成内容&#xff08;AIGC&#xff09;席卷创意与开发领域的今天&#xff0c;越来越多非专业背景的用户开始尝试训练自己的个性化模型。比如&#xff0c;一位插画师想让Stable Diffusi…

作者头像 李华
网站建设 2026/4/8 9:04:59

Git Commit规范指南:为lora-scripts贡献代码前必读

Git Commit规范指南&#xff1a;为lora-scripts贡献代码前必读 在开源AI项目中&#xff0c;一次看似简单的 git commit 操作&#xff0c;往往决定了整个团队的协作效率。尤其像 lora-scripts 这样服务于大模型微调任务的自动化训练框架&#xff0c;随着社区参与度提升&#xf…

作者头像 李华
网站建设 2026/4/16 14:44:48

手把手教你用lora-scripts自动标注图片并生成prompt元数据

手把手教你用 lora-scripts 自动标注图片并生成 prompt 元数据 在如今人人都能点几下鼠标就生成一张“赛博佛祖”的时代&#xff0c;个性化图像生成早已不再是实验室里的高深课题。但如果你真想让 AI 稳定输出某种特定风格——比如你最爱的插画师笔触、公司品牌视觉语言&#x…

作者头像 李华
网站建设 2026/4/11 22:11:34

HuggingFace镜像网站汇总:提升lora-scripts模型下载速度

HuggingFace镜像网站汇总&#xff1a;提升lora-scripts模型下载速度 在生成式人工智能快速发展的今天&#xff0c;越来越多的开发者和创作者希望借助 LoRA&#xff08;Low-Rank Adaptation&#xff09;技术对 Stable Diffusion 或大语言模型进行个性化微调。这种轻量级适配方法…

作者头像 李华
网站建设 2026/4/16 9:10:38

中文用户友好!lora-scripts支持本地化部署与国内镜像加速下载

中文用户友好&#xff01;lora-scripts支持本地化部署与国内镜像加速下载 在生成式AI浪潮席卷各行各业的今天&#xff0c;越来越多非技术背景的创作者开始尝试定制属于自己的图像或语言模型。然而&#xff0c;当他们真正打开终端、准备训练一个LoRA时&#xff0c;往往会被一连串…

作者头像 李华
网站建设 2026/4/16 9:10:39

社区论坛与Discord频道推荐:获取lora-scripts最新动态

社区论坛与Discord频道推荐&#xff1a;获取lora-scripts最新动态 在AI创作的浪潮中&#xff0c;个性化模型正从“少数人的实验”走向“大众化的工具”。无论是想训练一个专属画风的Stable Diffusion模型&#xff0c;还是为某个垂直领域定制语言助手&#xff0c;LoRA&#xff…

作者头像 李华