数据结构——红黑树

红黑树是二叉排序树的改进,

红黑树有几个特点:

  1:节点只有2中颜色,红色和黑色。

  2:根节点一定是黑色节点。

  3:红色节点的子节点一定是黑色节点。

  4:黑色高度(根节点到每个叶子节点的路径长度包含相同的黑色节点)相等。

 

   规定的插入的节点一定是红色节点,

红黑树的插入节点后需要调整的规则,插入节点需要调整的情况有3种:

  情况1:插入的节点的父节点和叔叔节点都为红色:

  以上情况节点4为插入节点(当前节点),这种情况调整方式是将父节点和叔叔节点都调整为黑色节点,祖父节点调整为红色,将祖父节点变为当前节点。调整后就变为情况2.如下:

  情况2:父节点为红色,叔叔节点为黑色,并且当前节点为父节点的右节点。将当前节点7的父节点变为当前节点,将当前节点作为支点向左LL旋转,就变为情况3:

  

  情况3:当前节点的父节点是红色,叔叔节点为黑色,并且当前节点是父节点的左节点。调整方法为:将父节点变成红色,祖父节点变成黑色,以祖父节点为支点向右LL旋转,最后将根节点变成黑色。

  总结:调整的顺序为  1->2->3:

后续关于删除的操作晴关注后续文章。

时间: 2024-10-18 01:51:48

数据结构——红黑树的相关文章

数据结构 - 红黑树(Red Black Tree)插入详解与实现(Java)

最终还是决定把红黑树的篇章一分为二,插入操作一篇,删除操作一篇,因为合在一起写篇幅实在太长了,写起来都觉得累,何况是阅读并理解的读者. 红黑树删除操作请参考 数据结构 - 红黑树(Red Black Tree)删除详解与实现(Java) 现在网络上最不缺的就是对某个知识点的讲解博文,各种花样标题百出,更有类似"一文讲懂xxx","史上最简单的xxx讲解","xxx看了还不懂你打我"之类云云.其中也不乏有些理论甚至是举例都雷同的两篇不同文章,至于作

数据结构-红黑树

转自:http://dongxicheng.org/structure/red-black-tree/ 1. 简介 红黑树是一种自平衡二叉查找树.它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用.在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持).它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它

数据结构 - 红黑树学习

红黑树 红黑树算是用的比较多,但是平时自己很少写的一种数据结构了,先看下介绍: 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组. 看~ 典型是用来实现关联数组,能想到什么数据结构呢?list map set这些容器的底层都是红黑树来实现的. 红黑树和AVL树(平衡二叉查找树) 红黑树并不是完全平衡的一棵树,所以红黑树是在平均时间(经验)上为O(log n)的复杂度,包括插入,删除和查找. 红黑树规则 所有节点都分为红色

数据结构-红黑树详解

介绍: 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组. 它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees).后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的"红黑树". 红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能. 它虽然

数据结构-红黑树(Red-Black Tree)的C++实现模板

红黑树的实现还真不简单,各种染色旋转足足折腾了笔者几天.. 不过收获也是巨大的.笔者现在终于明白为啥二叉搜索树这么重要了,确实很有用. 下面上代码. 细心的朋友可能会觉得似乎少了那么几个接口,没错,因为 Precessor(求前驱) / Successor(求后继) / getMaximum (求树中最大值)/ getMinimum(求树中最小值)/ Inorder Traversal(中序遍历)/ Postorder Traversal(后序遍历) 这些操作都可以直接用笔者二叉搜索树(BST)

算法导论 第三部分——基本数据结构——红黑树

红黑树 红黑树是一种二叉查找树,但在每个结点上增加了一个存储位表示结点的颜色,可以是RED或者BLACK.通过对任何一条从根到叶子的路径上各个着色方式的限制, 红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的.当二叉查找树的高度较低时,这些操作执行的比较快,但是当树的高度较高时,这些操作的性能可能 不比用链表好.红黑树(red-black tree)是一种平衡的二叉查找树,它能保证在最坏情况下,基本的动态操作集合运行时间为O(lgn). 1.红黑树的性质 #define RED 0

Java数据结构——红黑树

红黑树介绍红黑树(Red-Black Tree),它一种特殊的二叉查找树.红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值.红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black).红黑树的特性: 每个节点或者是黑色,或者是红色. 根节点是黑色. 每个叶子节点是黑色. (注意:这里叶子节点,是指为空的叶子节点) 如果一个节点是红色的,则它的子节点必须是黑色的. 从一个节点到该节点的子孙节点的所有路

数据结构——红黑树的删除节点操作

1. 红黑树的删除操作过程分析 1. 首先看一下普通搜索二叉树的删除操作,普通搜索二叉树删除结点找替代结点有3种情情景: 情景1:删除结点无子结点,直接删除 情景2:删除结点只有一个子结点 情景3:删除结点有两个子结点 在这里有一个重要的思路:删除结点被替代后,在不考虑结点的键值的情况下,对于树来说,可以认为删除的是替代结点. 基于此,上面所说的3种二叉树的删除情景可以相互转换并且最终都是转换为情景1. 对于情景2:删除结点用其唯一的子结点替换,子结点替换为删除结点后,直接删除 对于情景3:删除

java数据结构——红黑树(R-B Tree)

红黑树相比平衡二叉树(AVL)是一种弱平衡树,且具有以下特性: 1.每个节点非红即黑; 2.根节点是黑的; 3.每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的; 4.如图所示,如果一个节点是红的,那么它的两儿子都是黑的; 5.对于任意节点而言,其到叶子点树NULL指针的每条路径都包含相同数目的黑节点; 6.每条路径都包含相同的黑节点 原文地址:https://www.cnblogs.com/hardhp74520/p/11317028.html