红黑树R-B Tree

概述

红黑树(Red Black Tree)是一种自平衡的二叉查找树,在计算机科学中广泛使用,其典型的用途是实现关联数组。R-B Tree,全称是 Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)
定义:红黑树是一种特殊的二叉查找树,它通过特定的操作(如旋转和重新着色)来保持树的平衡,从而获得较高的查找、插入和删除性能。
发明:红黑树由Rudolf Bayer在1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),后由Guibas和Robert Sedgewick修改为如今的“红黑树”。
红黑树(Red-Black Tree)是一种自平衡二叉搜索树,它在插入和删除节点时,通过规则来保证树的平衡性,从而使得树的高度保持在较低的水平。这种平衡性确保了查找、插入和删除操作的时间复杂度始终为 O(log⁡n),即使在最坏情况下

红黑树的特性

(1)每个节点或者是黑色,或者是红色
(2)根节点是黑色
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL 或NULL)的叶子节点
(4)如果一个节点是红色的,则它的子节点必须是黑色的
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点
红黑树必须满足以下五个性质,以维持其平衡状态:
节点颜色:每个节点要么是红色,要么是黑色。
根节点颜色:根节点是黑色。
叶子节点:所有叶子节点(NIL节点,空节点)都是黑色的。
红色节点:如果一个节点是红色的,则它的两个子节点都是黑色的(即不能有两个连续的红色节点)。
黑色节点路径:从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点。

红黑树的原理

红黑树通过一系列复杂的操作来维持其平衡,主要包括插入和删除节点时的旋转和重新着色。
插入操作:插入新节点时,通常将其标记为红色,以避免破坏性质5。然后,通过一系列的旋转和重新着色操作,恢复红黑树的性质。
删除操作:删除节点时,可能需要通过旋转和重新着色来保持树的平衡。删除操作相对复杂,因为它可能涉及多个节点的移动和颜色的改变。
(1) 红黑树的性质:红黑树是一个二叉搜索树。在每个节点增加了一个存储位记录节点的颜色,可以是 RED,也可以是 BLACK,通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的两倍,加以平衡。性质如下:
i. 每个节点颜色不是黑色就是红色
ii. 根节点的颜色是黑色的
iii. 如果一个节点是红色,那么他的两个子节点就是黑色的,
没有持续的红节点
iv. 对于每个节点,从该节点到其后代叶节点的简单路径上,
均包含相同数目的黑色节点。

应用

红黑树由于其高效的查找、插入和删除性能,在多个领域有广泛的应用,包括但不限于:
数据库索引:红黑树可以用于数据库索引的实现,以快速地进行数据的查找、插入和删除。
C++ STL容器:C++标准模板库(STL)中的map和set容器底层实现就是红黑树,这使得它们能够高效地进行元素的查找、插入和删除。
Linux内核:Linux内核中的进程调度算法使用红黑树来管理进程的优先级,以便高效地进行进程的调度。
文件系统:一些文件系统使用红黑树来管理文件的目录结构,以便快速地进行文件的查找和访问。
保证最坏情况下的性能:红黑树的高度始终保持在 O(log⁡n),即使在最坏情况下,查找、插入和删除的时间复杂度也不会退化。
广泛应用:红黑树被广泛应用于许多计算机系统和库中,例如 Java 中的 TreeMap 和 TreeSet、C++ 中的 map 和 set,以及 Linux 内核的调度器和内存管理器中

为什么设计红黑树

红黑树通过它规则的设定,确保了插入和删除的最坏的时间复杂度是 O(log N) 。
红黑树解决了 AVL 平衡二叉树的维护起来比较麻烦的问题,红黑树,读取略逊于 AVL,维
护强于 AVL,每次插入和删除的平均旋转次数应该是远小于平衡树。
因此:
相对于要求严格的 AVL 树来说,红黑树的旋转次数少,所以对于插入、删除操作较多的情
况下,我们就用红黑树。但是,只是对查找要求较高,那么 AVL 还是较优于红黑树
红黑树与AVL树的区别
红黑树与AVL树都是自平衡的二叉查找树,但它们在维持平衡的方式上有所不同。AVL树通过保持任何节点的两个子树的高度最大差别为一来维持平衡,而红黑树则通过节点的颜色和旋转操作来维持平衡。相比之下,红黑树的旋转次数更少,但查找效率可能略低于AVL树。然而,红黑树在实际应用中通常更加高效,因为它在保持平衡的同时减少了旋转操作的复杂性。

红黑树左旋与右旋的区别

当在对红⿊树进⾏插⼊和删除等操作时,对树做了修改可能会破坏红⿊树的性质。为了继续保持红⿊树的性质,可以通过对结点
进⾏重新着⾊,以及对树进⾏相关的旋转操作,即通过修改树中某些结点的颜⾊及指针结构,来达到对红⿊树进⾏插⼊或删除结点等操作
后继续保持它的性质或平衡的⽬的。
树的旋转分为左旋和右旋,下⾯借助图来介绍⼀下左旋和右旋这两种操作。
在这里插入图片描述

在这里插入图片描述

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值