【数据结构】红黑树{更新中}

数据结构与算法中红黑树的性能优势 本文旨在全面解析红黑树在数据结构与算法中的性能优势,帮助读者理解为什么红黑树在众多场景下成为首选数据结构。我们将覆盖红黑树的基本概念、核心特性、性能分析以及实际应用。核心概念与联系:解释红黑树的基本概念及其与其他数据结构的关系性能优势分析:详细分析红黑树的时间复杂度及其保证机制实现细节:通过代码示例展示红黑树的具体实现应用场景:探讨红黑树在实际系统中的典型应用未来展望:讨论红黑树的局限性和发展方向红黑树:一种自平衡的二叉搜索树,通过颜色标记和旋转操作保持平衡平衡因子。 阅读详情

 

二叉树

二叉树的产生:方便在一堆数中快速找到目标数。

二叉树的查找规律:以1号树为例,查100。从树根50起,比50大就到以75为根的右子树中找;比75大,同理;与右子树根100比对相等,结束。总计遍历 3 个节点。注意观察1号树有3层节点,因此在1号树中查找任意数字最多只需遍历3个节点;同理 2号树 最多遍历4个节点。与1号树相比遍历数堆查找则最多 7 个,平均 3.5 个节点。 

数列构造的二叉树
同一堆数构成的不同的二叉树

 

二叉树的树形:不同的树形和数字插入二叉树的顺序有关。1号树的可能插入顺序如图解。同理 2号树 的可能插入顺序为:75,100,25,30,60,10 。

树的构造过程
1号树的构造过程图例

 

平衡二叉树

平衡二叉树的产生:同一数堆的形状不同的二叉树中,不是所有二叉树都是左右平衡的,极端情况是不存在左/右子树。此类形状的二叉树是不平衡的,与数组无异。

平衡二叉树:每个节点的左右子树高度较为平衡。

 

不平衡的二叉树
不平衡的二叉树

 

红黑树的规则

红黑树的产生:1978年由"平衡二叉B树"演变而来,是一个查找,插入,删除效率都为 O(log_{n}) 的平衡二叉树。

红黑树的规则:

根节点着黑色
1 根节点一定是黑色
叶子是黑色的NIL节点
2 叶子是黑色的NIL节点
节点不是红色就是黑色
3 节点不是红色就是黑色

 

红色节点一定有两个黑子
4 红色节点一定有两个黑子
任意节点到叶子路过数量相同的黑色节点
5 任意节点到所有叶子路过数量相同的黑色节点

 

4号树 与 3号树 镜像对称,所以也找不到建树方案;1号树 左右完全平衡一定满足上述 5 个条件,下面给出 2号树 符合上述 5 个规则的建树方案。

满足条件的红黑树
由 2 号树形构造的红黑树

 

红黑树化

红黑树化的产生:由于插入顺序导致树的不平衡,因此只需要在插入节点和删除节点时,采取一些措施保证最终的树形满足红黑树的规则。

红黑树化的规则:这里参考了网路上一篇图文并茂的博文来讲解。

 

插入操作

插入的影响:

相机标定原理与张氏标定法 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar 阅读详情

相关推荐

Cursor Pro版保姆级开通教程:绕过7天试用,支付宝一步搞定(附地区报错解决方案)

本文详细介绍了Cursor Pro版的订阅流程,包括支付宝支付步骤和解决区域报错的实用方案。针对开发者常见的网络问题和云服务器配置需求,提供了从本地环境调整到云端部署的完整指南,帮助用户高效解锁Pro版的代码补全、私有代码库等核心功能。

weixin_28710999的博客 2092

数据结构_红黑树

红黑树 红黑树也是属于一种BBST。在之前介绍的伸展树中,虽然实现简单,分摊复杂度低,但是最坏情况下的操作需要O(n)时间,无法适用于对单次效率敏感的场合。相反的,之前介绍的AVL树尽管可以保证最坏情况下的单次操作,但是要在节点中嵌入平衡因子等标识;更重要的是,删除操作之后可能需要多达O(logn)次旋转。红黑树是针对后一不足的改进。通过为节点指定颜色,合理动态调整。它可以保证:在每一次插入或删...

xc13212777631的博客 1068

YOLOv8冻结层的迁移学习 全网首发

在调用时会创建trainer此时的模型配置更新了,冻结了个p。

qq_42693842的博客 6586

【一份代码搞定数据结构】红黑树(更新中)

在介绍红黑树之前先说明什么是二叉查找树和平衡二叉树。 一、二叉查找树(BST) 1 . 二叉查找树本身就是一个空树。 2 . 左子树的数值 < 根节点 < 右子树的数值。 基本四个操作:查找 , 插入 , 建树 , 删除。由于不是重点要说明的,所以只是贴出来用一下。 #include<iostream> using namespace std; struct ...

Bonstoppo 310

保姆级教程:用ESP32和SPH0645麦克风做个无线录音笔(附Python服务端实时播放)

本文提供了一份详细的ESP32无线录音笔开发指南,涵盖从硬件搭建到Python服务端实时回放的全过程。通过SPH0645麦克风采集高质量音频数据,利用ESP32的I2S接口和WiFi功能实现无线传输,并结合Python服务端实现实时播放和WAV文件保存,适合远程音频监控和创意交互装置开发。

weixin_30700099的博客 641

TI DSP TMS320F280025 Note1:工程模板Template创建

该方法新建的工程支持寄存器开发,同时也支持库函数开发,新建后移动该工程也不需要重新修改路径,路径使用变量定义,使用方便、移植性能高

weixin_52849254的博客 2302

红黑树的查询,新增和删除,总结

红黑树定义和性质 红黑树是一种含有红黑结点并能自平衡的二叉查找树。它必须满足下面性质: 性质1:每个节点要么是黑色,要么是红色。 性质2:根节点是黑色。 性质3:每个叶子节点(NIL||Null)是黑色。 性质4:每个红色结点的两个子结点一定都是黑色。 性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。 从性质5又可以推出: 性质5.1:如果一个结点存在黑子结点,那么该结点肯定有两个子结点 红黑树不是完美平衡的二叉树。 造成这种不完美平衡的是中间的红色节点,根据性质5我们知道任意一个结

sfjsww66的博客 1254

Windows下飞桨PaddlePaddle 2.6.1 GPU版环境搭建全攻略(含CUDA 11.7配置避坑指南)

本文详细介绍了在Windows系统下搭建飞桨PaddlePaddle 2.6.1 GPU版环境的完整流程,特别针对CUDA 11.7和cuDNN的安装提供了避坑指南。从Anaconda环境配置、CUDA Toolkit安装到飞桨GPU版的验证,手把手帮助开发者高效完成深度学习环境搭建,解决常见问题并优化性能。

x8y9z0的博客 1094

红黑树(RBTree) (Update 12.30 仅实现插入)

/** * Tree-Insert(T,x) * color[x] <- red * while x != root[T] and color[x] == Red * 1. p[x] = left[p[p[x]]] // 父节点是不是祖父结点的左儿子 - A class * 2. p[x] = right[p[p[x]]] // 父节点是不是...

一个蒟蒻的博客 238

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

perseverance51博客 2892

MATLAB 基于 Baker 映射和 Logistic 混沌序列的图像加解密实现

图像加密是信息安全领域的重要研究方向,在数字版权保护、隐私保护等领域有着广泛应用。本文将介绍基于 MATLAB 的 Baker 映射和 Logistic 混沌序列的图像加解密算法,该算法利用混沌系统的初值敏感性和伪随机性,能够有效地对图像进行加密和解密。基于 Baker 映射和 Logistic 混沌序列的图像加解密算法是一种有效的方法,可以应用于数字版权保护、隐私保护等领域。MATLAB 提供了强大的工具和函数,可以方便地实现该算法。

走向CTO的路上... 934

动态图解 红黑树-新增节点

准备知识: 新插入的节点都是红色的 为了不违反红黑树的 路径中经过的黑色节点数一致性 原则 红叔问题 先上图 旋转(左旋,右旋) 先上图

luwfls的博客 398

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数据结构——红黑树(hashmap底层实现)(更新中)

树基础及红黑树

Laptoy的博客 603

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数据结构与算法笔记:基础篇 - 红黑树(上):为什么工程中都用红黑树这种二叉树?

平衡二叉树的严格定义是这样的:二叉树中任意一个结点的左右子树的高度相差不能大于 1。从这个定义来看,上篇文章讲的完全二叉树、满二叉树其实都是平衡二叉树,但是非并完全二叉树也有可能是平衡二叉树。平衡二叉查找树不仅满足上面平衡二叉树的定义,还满足二叉查找树的特点。最先被发明的平衡二叉查找树是 AVL 树,它严格符合刚刚讲到的平衡二叉查找树的定义,即任何子节点的左右子树的高度相差不超过 1,是一种高度平衡的二叉查找树。但是很多平衡二叉查找树其实并没有严格符合上面的定义,所以,我感觉没必要去死抠定义。

chenjian723122704的专栏 983

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

了解红黑树

红黑树(Red Black Tree) 0.红黑树的特点 是一种查找和修改删除都比较高效的二叉树 性质1.节点是红色或黑色。 性质2.根节点是黑色。 性质3.每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点) 性质4.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。 1.这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的...

过河的小卒子的博客 643

b/b+树很快为什么还要用红黑树? 红黑树? Mysql中有红黑树吗

在数据库和数据结构的设计中,B/B+树和红黑树各有其独特的优势和适用场景。3层B+树可管理数十亿数据,而红黑树管理相同数据需要约30层,导致30次I/O(不可接受)。若数据完全在内存中且规模较小(如几千条),红黑树的等值查询性能与B+树相当,但实现更简单。B+树的节点通常设置为磁盘块大小(如16KB),一次I/O可读取多个键值,减少寻道时间。B+树单个节点可存储数百个键值(如16KB页存储1000个键),树横向扩展能力强。:使用B+树(聚簇索引和二级索引均为B+树)。

hxsln11的博客 663

java红黑树实现英文字典

期中的project存档。 class RBTree{ String EnglishVersion,ChineseVersion; RBTree parent,leftChildTree,rightChildTree,treeRoot; boolean Red=true,Black=false,color,originalColorForDeletion; String[] RBTreeArrayForKeySearch=new String[10000]; publ

weixin_45637187的博客 387

Ygg:一款功能强大的C++17数据结构库

Ygg:一款功能强大的C++17数据结构库 1. 项目基础介绍和主要编程语言 Ygg(Yggdrasil的简称)是一个使用C++17编写的数据结构库,它为开发者提供了一系列侵入式数据结构的实现。这些数据结构包括红黑树、Zip树、平衡树、区间树、双向链表和动态线段树等。项目采用C++17标准,充分利用了现代C++的特性,使得数据结构更加高效和易于使用。 2. 项目的核心功能 Ygg的核心功能包括: ...

gitblog_00278的博客 545

JavaScript 实现的二叉搜索树和红黑树

JavaScript 实现的二叉搜索树和红黑树 项目基础介绍 本项目是基于 JavaScript 语言的开源项目,提供了一个用于实现二叉搜索树和红黑树的库。该项目的目标是提供一个稳定、高效的数据结构实现,以便于在 JavaScript 环境中使用。 主要编程语言 JavaScript 核心功能 本项目主要包括以下两个核心数据结构: 二叉搜索树(Binary Search Tree):一种用于存储...

gitblog_00420的博客 409

动态更新的数据结构介绍与对比

支持动态更新的数据结构: 散列表、跳表、红黑树 对比分析: 散列表: 插入删除查找都是O(1) 优点:时间复杂度低 缺点:不能够顺序遍历,动态扩容操作以及散列函数和解决冲突的操作可能会消耗时间 适用场景:适用于那些不需要顺序遍历,数据更新不那么频繁的 跳表: 插入删除查找O(logn) 优点:能够顺序遍历 缺点:空间复杂度O(n) 适用场景:不那么在意内存空间的,...

Pinkmanabcd的博客 636

为什么 MySQL 索引用的是 B+ 树而不是红黑树?

MySQL索引选择B+树而非红黑树的主要原因是:B+树更适合数据库场景的需求。红黑树虽然查询效率高(O(log n)),但树高较大导致磁盘IO次数多,且不支持高效范围查询。而B+树通过多叉结构显著降低树高(百万数据仅3层),叶子节点链表实现快速范围扫描,并充分利用磁盘预读特性。此外,B+树的节点分裂合并操作比红黑树的旋转调整更高效。因此,B+树在减少IO次数、支持范围查询和适配磁盘存储等方面具有明显优势,成为数据库索引的最佳选择。

weixin_45422672的博客 578

jdk 8 以后HashMap数据结构添加了红黑树

it_manman的博客 877

红黑树的结构和优势

首先看一下红黑树的结构: 红黑树的结构特点: (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节点是红色的,则它的子节点必须是黑色的。 (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。 为什么要要用红黑树? 1、首先红黑树是不符合AVL树的平衡条...

我的代码路程 4479

数据结构定义和算法--红黑树(上)

什么是“平衡二叉查找树”? 二叉树中任意一个节点的左右子树的高度相差不能大于 1。从这个定义来看,完全二叉树、满二叉树其实都是平衡二叉树,但是非完全二叉树也有可能是平衡二叉树。 解决的问题 解决普通二叉查找树在频繁的插入、删除等动态更新的情况下,出现时间复杂度退化的问题。 平衡的真实含义 平衡二叉查找树中“平衡”的意思,其实就是让整棵树左右看起来比较“对称”、比较“平衡”,不要出现左子树很高、右子树很矮的情况。这样就能让整棵树的高度相对来说低一些,相应的插入、删除、查找等操作的效率高一些。 如何

茹泽伟的博客 227

HashMap为什么用红黑树

背景 在jdk8之前,hashmap底层由数组+双向链表 实现 在jdk8之后,如果链表长度超过8,则会转换会红黑树,低于6之后,则会还原为链表。 原因 为什么要使用红黑树? 链表的查询复杂度为o(n); 而红黑树的复杂度能达到o(logn); 为什么使用红黑树而不是AVL树 AVL树的平衡条件更为苛刻,可以提供更快的查找效果,因此对于查找密集型的任务,AVL是更合适的选择。 红黑树更通用,AVL树中查找通常更快,但这是以更多旋转操作导致更慢的插入和删除为代价的。因为AVL树可能需要O(log n)旋转,而

qq_23934693的博客 3519

红黑树实现

待更新

魔筝炼药师 578
上一篇: 【数据结构】堆{更新中}
下一篇: 【图】最小生成树{更新中}
vectorX
博客等级 码龄11年 37粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值