刚刚学了二叉树,突然又蹦出来一个“红黑树”,这里就是学习红黑树的一些小心得。
红黑树,从名字就可以看出来,这种数是由红和黑两种颜色来表示的。
首先需要了解红黑树的五个重要性质。
1.每一个节点要么是黑色要么就是红色;
2.根节点一定是黑色;
3.每一个叶子节点一定是黑色;
4.如果一个节点是红色,那么它的两个子节点都是黑色;
5.任一节点到其每个叶子的所有路径,都包含相同数目的黑色节点。
关于黑高度的定义:
从任何一个节点,向下到底部的路径中,包含的黑节点的个数,称为这个节点的黑高度。从红黑树的第5条性质可以看出,黑高度是唯一的、确定的。
只要同时满足红黑树的这些条件,就一定会有“红黑树可以保证任何两条从根部到树叶的路径节点个数相差不超过2倍”这个平衡的性质。
红黑树是一种特殊的二叉树,与普通的二叉树不同就是它的每一个节点都必须满足上面的五个性质,通过对于每条路径上节点颜色的规则进行限定,红黑树可以保证任何两条从根部到树叶的路径节点个数相差不超过2倍。所以,红黑树是一种近似平衡的二叉搜索树。
红黑树的查找、最大值、最小值、前趋、后继等操作,与普通的二叉搜索树没有什么区别。插入和删除操作需要重新实现。仅仅用普通的二叉搜索树的插入和删除动作,可能会破坏红黑树本身的一些性质,因此,需要进行额外的处理。这些额外的处理主要是改变树节点的颜色,或是改变树的结构。
红黑树的插入:
在插入节点时,首先将插入的节点设为红色,用普通二叉树的方法,将此节点插入到红黑树中,然后再想办法把被破坏的性质一一进行恢复。当一个红色的节点被插入时,只有两条性质可能被破坏,即性质2和性质4,如果插入后,其父节点是黑色,那么不需要进行改变,如果插入后发现其父节点是红色或者没有父节点(即在根节点上),那么就要对其进行调整。由此可见,其主要的恢复部分是性质4,那么接下来主要讨论下关于性质4的恢复情况分析。
情况1:插入的地方是根节点
这种情况下,直接把此节点改为黑色即可。
情况2:插入的节点的父节点是黑色
这种情况下没有任何错误。
情况3:插入的节点的父节点是红色,且其祖父节点的另一个子节点(叔叔节点)也是红色
这种情况下,又可以分为父节点是左儿子还是右儿子,根据其对称性,这里只考虑是左儿子的情况。
首先,把插入的节点的父节点和叔叔节点改为黑色,把祖父节点改为红色,再根据祖父节点的情况,往上继续检查,看是否符合红黑树的性质。
情况4:插入的节点的父节点是红色,其叔叔节点是黑色,并且插入节点为父节点的右儿子
这种情况下,不考虑插入的节点,以此节点的父节点为支点,进行左旋变化。
情况5:插入的节点的父节点是红色,其叔叔节点是黑色,并且插入节点为父节点的左儿子
这种情况下,将插入节点的父节点变为黑色,其祖父节点变为红色,并以祖父节点为支点,进行右旋改变。
不得不吐槽一下,找了一些图片说明,但是。。。插入图片太麻烦了,就不想插入了!留着下次写【删除】的时候再用吧!!
相关推荐
2. 按照二叉查找树的规则插入这些数字,同时应用红黑树的插入策略。 3. 在每个插入步骤中,更新树的结构并显示树的状态,包括节点的颜色和位置。 4. 展示旋转过程,如左旋(left-rotate)和右旋(right-rotate),...
红黑树是一种自平衡二叉查找树,它的主要特点是在保持二叉查找树特性的同时,通过特定的颜色规则来确保树的平衡,以达到快速查找、插入和删除的目的。红黑树的每个节点都有一个颜色属性,可以是红色或黑色。在插入新...
算法中,红黑树的统计性能优于其他类型的平衡二叉搜索树(如AVL树),因为它在插入和删除操作时需要做的旋转次数更少。尽管在查找性能上可能略逊于AVL树,但总体上红黑树因其在维护平衡时的高效而被广泛采用。 关于...
### 红黑树的插入与删除:详细解析 红黑树是一种自平衡二叉查找树,由Rudolf Bayer在1972年发明,最初被称为“对称二叉B树”。它在1978年Leo J. Guibas和Robert Sedgewick的论文中获得了现代名称“红黑树”。红黑树...
在"红黑树建立、插入、旋转、可视化显示"这个课程作业中,我们可以学习到以下几个关键知识点: 1. **红黑树的基本属性**: - 节点颜色:每个节点要么是红色要么是黑色。 - 根节点是黑色。 - 所有叶子节点(NIL或...
1. **基本插入**:首先,新插入的节点默认为红色,然后将其作为叶子节点插入到树中,此时可能会违反红黑树的某些性质。 2. **颜色调整**:如果新插入的节点破坏了红黑树的性质,需要进行颜色调整来恢复性质。常见的...
算法导论红黑树插入算法来建立一颗红黑树并且遍历输出
红黑树插入算法 红黑树是一种自平衡二叉查找树,它能够在O(log n)时间内完成插入、删除和查找操作。红黑树的插入算法是指在红黑树中插入新的节点,使得红黑树保持其平衡和性质。 红黑树插入算法的步骤可以分为以下...
实验进行的是对红黑树进行插入操作的实现,主要方法按照《算法导论》中红黑树算法的描述及伪代码进行编码,采用的是c++。代码已经经过测试可用
### 中科大红黑树插入算法实验报告 #### 一、背景介绍 红黑树(Red-Black Tree,简称RBT)是一种自平衡的二叉查找树,它通过确保树的高度始终保持在对数级别来保证查找操作的时间复杂度为O(log n)。红黑树在各种...
1. **常规二叉搜索树插入**:首先,红黑树像普通二叉搜索树一样插入新节点,新插入的节点默认为红色。 2. **颜色调整**:由于插入红色节点可能导致违反红黑树的性质,因此需要进行颜色调整。调整通常通过“右旋”、...
在C++中实现红黑树,我们需要理解其核心属性和规则,并能够熟练地进行节点插入操作。 1. **红黑树的特性**: - 每个节点要么是红色,要么是黑色。 - 根节点是黑色。 - 所有叶子节点(NIL或空节点)是黑色。 - ...
红黑树是一种自平衡二叉查找树,它的设计目的是为了在保持高效查找性能的同时,能够快速地进行插入和删除操作。红黑树的特性保证了它在最坏情况下的时间复杂度仍然接近于最佳的平衡二叉查找树,即O(log n)。以下是...
红黑树的主要特性保证了其在插入、删除和查找操作中的高效性能,通常时间复杂度为O(log n),其中n是树中元素的数量。 红黑树的性质如下: 1. 每个节点要么是红色,要么是黑色。 2. 根节点是黑色。 3. 所有叶节点...
1. **myrbtree.c**:这是红黑树的主要实现文件,包含了红黑树节点的定义、插入、删除和查找等操作的代码。其中,节点通常包含键值、颜色、左子节点、右子节点以及父节点等字段。插入和删除操作需要保证红黑树的性质...
红黑树插入删除算法,算法导论上算法,可以运行
在给定的文件中,"rbtree.cpp"很可能是实现红黑树节点定义和操作的代码,包括旋转、颜色调整、插入和删除等功能。"main.cpp"则是测试和驱动程序,用于验证红黑树实现的正确性。"rbtree.h"可能包含了红黑树的类定义和...
红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树...
实验1:实现红黑树的基本算法, 对n的取值分别为 12、24、36、48、60,随机生成n 个互异的正整数(K1, K2, K3, ……, Kn)作为节点的关键字,向一棵初始空的红黑树中依次插入这n 个节点,统计算法运行所需时间 ,画...