问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

深入剖析红黑树

创作时间:
作者:
@小白创作中心

深入剖析红黑树

引用
CSDN
1.
https://m.blog.csdn.net/qq_51626216/article/details/145850181

在数据结构的领域中,红黑树是一颗耀眼的明星。它以独特的性质和高效的操作,广泛应用于各种场景,像 Java 的集合框架 TreeMap 和 TreeSet 中,就有它的身影。今天,就让我们一同走进红黑树的世界,揭开它神秘的面纱。

一、红黑树的定义与特性

红黑树是一种自平衡的二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是红色或者黑色。正是这些颜色的巧妙安排,使得红黑树满足了以下五条特性:

  1. 节点颜色:每个节点要么是红色,要么是黑色。这是红黑树最基本的特征,为后续的性质奠定基础。
  2. 根节点颜色:根节点是黑色的。这保证了树的整体结构的稳定性,从最顶层就确立了一种平衡的基调。
  3. 叶子节点颜色:每个叶子节点(NIL 节点,空节点)是黑色的。这里的叶子节点指的是那些不存储数据的外部节点,它们的黑色属性是维持树的平衡的关键因素之一。
  4. 红色节点的子节点:如果一个节点是红色的,则它的两个子节点都是黑色的。这一特性避免了连续的红色节点出现在一条路径上,防止树的结构向一侧过度倾斜。
  5. 路径上的黑色节点数量:从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑色节点。这确保了从根节点到叶子节点的所有路径的长度大致相同,从而实现了树的自平衡。

这五条特性相互配合,共同构建了红黑树的稳定结构。它们就像是一套精密的规则,让红黑树在动态的插入和删除操作中,依然能够保持良好的性能。

二、红黑树的插入操作

当我们向红黑树中插入一个新节点时,首先会按照二叉搜索树的规则找到合适的位置插入。新插入的节点默认为红色,这是因为如果插入黑色节点,会直接破坏性质 5(路径上黑色节点数量增加),而插入红色节点相对更容易通过调整来恢复树的性质。

插入新节点后,可能会出现两种破坏红黑树性质的情况:

  1. 插入节点的父节点是红色:这就违反了性质 4(红色节点的子节点必须是黑色)。此时,我们需要通过旋转和变色操作来恢复树的性质。
  2. 插入节点是根节点:将插入节点染成黑色,以满足性质 2(根节点是黑色)。

调整策略

  1. 左旋:以某个节点为中心,将其右子树提升为父节点,原父节点变为左子树。左旋操作可以改变树的结构,使得右侧过重的部分得到平衡。
  2. 右旋:与左旋相反,以某个节点为中心,将其左子树提升为父节点,原父节点变为右子树。右旋操作用于调整左侧过重的树结构。
  3. 变色:将节点的颜色从红色变为黑色,或者从黑色变为红色。变色操作与旋转操作配合,恢复红黑树的性质。

通过这些操作的灵活运用,红黑树能够在插入新节点后,快速恢复平衡,保证树的性质不变。

三、红黑树的删除操作

删除操作是红黑树中较为复杂的部分。在删除节点时,同样先按照二叉搜索树的规则找到并删除目标节点。删除节点后,会对红黑树的性质产生影响,需要进行调整。

删除节点的情况

  1. 删除节点没有子节点:直接删除该节点。
  2. 删除节点只有一个子节点:用子节点替换删除节点。
  3. 删除节点有两个子节点:找到删除节点的后继节点(通常是右子树中的最小节点),用后继节点的值替换删除节点的值,然后删除后继节点。

调整策略

删除节点后,可能会导致从根节点到某些叶子节点的路径上黑色节点数量减少,从而破坏性质 5。此时,需要通过旋转和变色操作来恢复树的性质。调整过程较为复杂,需要根据具体情况进行判断和处理,但总体思路依然是通过改变树的结构和节点颜色,使树重新满足红黑树的五条特性。

四、红黑树的时间复杂度

红黑树的时间复杂度为O(logn) ,其中 是树中节点的数量。这是因为红黑树的自平衡性质保证了树的高度始终保持在 O(logn) 的级别。在插入和删除操作中,虽然需要进行旋转和变色等调整操作,但这些操作的时间复杂度也是 O(logn),所以红黑树在动态操作下依然能够保持高效的性能。

五、红黑树的应用场景

  1. 关联数组:如 Java 的 TreeMap 和 C++ 的 std::map,红黑树能够高效地实现键值对的存储和查找,保证了插入、删除和查找操作的时间复杂度为 。
  2. 集合实现:像 Java 的 TreeSet,红黑树用于存储集合中的元素,确保元素的唯一性和有序性,同时提供高效的插入、删除和查找操作。
  3. 操作系统调度:在操作系统的进程调度中,红黑树可以用于管理进程的优先级队列,根据进程的优先级进行高效的插入和删除操作,保证系统的高效运行。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号