`

RBTree 红黑树

阅读更多

 

纯属个人笔记,来自《Java数据结构和算法》

 

 

二叉搜索树

满足l.data<data<r.data

 

 

 

平衡树

满足|rh - lh|<=1

 

 

 

RBTree 

一、满足一下规则就是平衡树

1.每个节点红色或黑色

2.根总是黑色

3.如果节点时红色的,则它的子节点必须是黑色的

4.从跟到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点

(黑色深度需要相同)

 

重复的关键字要分配到关键字的两侧

 

 

二、修正违规的情况:

1.改变节点颜色

一般为改变根节点

 

 

2.执行旋转操作

RoR,右旋转:执行一次旋转,所有的节点都将改变位置,旋转节点的左子节点会成为他的父节点,他将成为右子节点,他的右子节点仍然是他的右子节点

 

RoL,左旋转:执行一次旋转,所有的节点都将改变位置,旋转节点的右子节点会成为他的父节点,他将成为左子节点,他的左子节点仍然是他的左子节点

 

旋转中的特殊情况-节点平移,指的是旋转节点要成为子节点的子节点,但是当子节点已经有了子节点,那么右旋,会平移到右子节点,反之亦然。

 

旋转时可以平移子树

 

 

三、插入节点

概念:G->P->X

      外侧子孙,p和x都是左子节点或右子节点

      内侧子孙,反之,p和x的左右位置不同

      

在节点下行途中的颜色变换

每当查找例程遇到一个有两个红色子节点的黑色节点时,则必须把子节点变为黑色,父节点变为红色

--会引起问题3,因为子根变为了红色

 

插入后的旋转

插入后有三种情况

1.P是黑色的

2.P是红色的,X是G的一个外侧子孙节点

3.P是红色的,X是G的一个内侧子孙节点

当是1时,不用做任何处理

当是2时,需要一次旋转和一些颜色变换

                改变G和P的颜色,G进行旋转,将X向上升的方向(一般P是什么子,就反着转,如是左子,             就右旋)

当是3时,需要两次旋转和一些颜色变换

                改变G和P的颜色,先P旋转,P是什么子,就怎么选(如是左子,就左旋),这样可以讲节点变为外侧子孙节点;接着跟情况2相同,G进行旋转,将X向上升的方向

 

在节点下行途中的旋转

(在所有的颜色变换情况,当子根变为了红色,都会导致问题3)

同样也有两种情况,子跟变换之后成为1.外侧子孙节点 2.内侧子孙节点

这是X节点为违背节点,操作和插入时的2,3情况操作相同

 

 

四、删除节点

可以如同普通二叉树那样,用中续后的节点代替;

或是不删除节点,只是忽略这个节点

 

 

分享到:
评论

相关推荐

    使用Java语言实现的rbtree红黑树.zip

    在给定的“使用Java语言实现的rbtree红黑树”压缩包中,可能包含了自定义实现的红黑树类,用于学习和理解红黑树的内部工作原理。这样的实现可以帮助开发者深入理解数据结构,以及如何在实际编程中应用这些概念。 ...

    使用C语言实现的rbtree红黑树.zip

    红黑树(Red-Black Tree)是一种自平衡的二叉查找树,由计算机科学家Rudolf Bayer在1972年提出。它在保持二叉查找树特性的同时,通过引入颜色属性来确保树的平衡,从而提高数据操作的效率。在C语言中实现红黑树,...

    使用C++实现的rbtree红黑树.zip

    红黑树(Red-Black Tree)是一种自平衡的二叉查找树,由计算机科学家Rudolf Bayer在1972年提出。它在保持二叉查找树特性的同时,通过引入颜色属性来确保树的平衡,从而优化了插入、删除和搜索操作的时间复杂度。红黑...

    红黑树 rbtree

    在提供的“rbtree”压缩包中,很可能包含了红黑树的实现代码,这可能是C、C++或其他支持面向对象编程的语言,如Java或C#。代码可能定义了一个红黑树的数据结构,包括节点类(包含颜色属性和左右子节点),以及插入、...

    红黑树-动态演示生成红黑树

    红黑树(Red-Black Tree)是一种自平衡二叉查找树,由计算机科学家鲁道夫·贝尔在1978年提出。它在保持二叉查找树特性的同时,通过引入颜色属性来确保树的平衡,从而提高了数据操作的效率。红黑树的主要目标是保证在...

    红黑树(RBtree)实现代码

    - `RBTree`类:作为红黑树的容器,包含根节点、插入、删除、查找等成员函数。 - 构造函数:初始化空树,根节点为黑色。 - `insert`函数:插入新节点并保持红黑树性质。 - `erase`函数:删除指定节点,并调整树...

    红黑树-使用C++实现-简单练习

    在给定的文件中,"rbtree.cpp"很可能是实现红黑树节点定义和操作的代码,包括旋转、颜色调整、插入和删除等功能。"main.cpp"则是测试和驱动程序,用于验证红黑树实现的正确性。"rbtree.h"可能包含了红黑树的类定义和...

    红黑树-数据结构

    而`RBtree.h`则可能定义了红黑树的类结构以及相关的接口声明,供其他模块引用和调用。 6. **应用场景**: 红黑树广泛应用于各种数据结构和算法中,例如标准模板库(STL)中的`std::map`和`std::set`就是基于红黑树...

    gcc 红黑树(二叉搜索树 红黑树 动态排序树 精确计时)

    RBTree很可能是实现了红黑树的数据结构代码,而BTree可能是指B树(一种自平衡的多路搜索树),虽然它不是红黑树,但也是另一种常用于动态排序和存储的数据结构。 总之,红黑树是计算机科学中的一个重要概念,广泛...

    红黑树的例子

    - `RBTree` 类是红黑树的实现类,它使用 `TreeNode` 类作为其内部节点的类型。 - `header` 成员变量是一个特殊节点,用于简化红黑树的边界条件处理,例如在空树的情况下,`header` 可以充当伪根节点,使得所有操作都...

    红黑树rbTree.c

    红黑树的遍历,查找过程,以及插入时对红黑树进行位置修复,修复包括左旋右旋,还有就是红黑树节点的删除,删除之后还要对节点修复

    C++红黑树实现过程

    - `rbtree.h`文件通常会包含红黑树的数据结构定义,以及相关的函数声明。数据结构可能包括一个表示树节点的结构体,其中包含键值、颜色属性(红色或黑色)、左子节点、右子节点以及父节点等字段。此外,可能还会声明...

    红黑树-附C代码

    在"rbtree-master"这个压缩包中,很可能包含了红黑树的C语言实现源代码,包括数据结构定义、插入、删除、查找等操作的函数,以及可能的测试用例和示例。通过学习和理解这些源代码,你可以深入了解红黑树的内部工作...

    java-红黑树-代码实现(一)

    `RBTree.java`类将实现红黑树的基本操作,如插入、删除、查找等。插入操作需要考虑新节点的位置以及如何保持红黑树的性质;删除操作则可能涉及节点的替换、颜色调整和旋转等复杂操作。为了确保正确性,插入和删除...

    红黑树demo python代码

    红黑树是一种自平衡二叉查找树,由Rudolf Bayer在1972年提出。它的设计目标是在保持二叉查找树基本性质的同时,通过引入颜色属性来保证树的平衡,从而达到高效的插入、删除和查找操作。在这个“红黑树demo python...

    Java实现的红黑树

    - `RBTree`:红黑树的主体类,包含插入、删除、查找和打印树的方法。 使用这些源码,可以学习和理解红黑树的具体实现细节,比如如何处理插入和删除时的平衡问题,以及如何在Java中编写高效的二分查找树代码。 6...

    红黑树java实现

    `RBTree` 类用于实现红黑树的主要操作,如插入、删除等。 - **构造函数**:初始化红黑树。 - **create** 方法:创建红黑树,接收一个整型数组,遍历数组并调用 `insert` 方法插入每个元素。 - **insert** 方法:...

    红黑树算法对应的c++实现

    `RBTree.cpp`和`RBTree.h`这两个文件通常包含了红黑树的C++实现。在`RBTree.h`中,你可能会看到红黑树节点的定义,包括节点的颜色(RED或BLACK),键值,左子节点,右子节点以及可能的父节点。此外,这个头文件还...

    构造红黑树很方便的程序

    在压缩包中的"rbtree"文件,可能是一个源代码文件,包含了实现红黑树的数据结构和相关操作的函数。通过阅读和理解这个文件,你可以学习到如何在实际编程中应用红黑树,以及如何在C++环境中组织代码来实现复杂数据...

    Linux内核红黑树

    在Linux内核源代码中,红黑树的实现位于`include/linux/rbtree.h`和`include/linux/rbtree_augmented.h`等头文件中。主要的数据结构定义为`struct rb_node`,它包含指向父节点、左子节点和右子节点的指针,以及表示...

Global site tag (gtag.js) - Google Analytics