当前位置:   article > 正文

什么是红黑树_红黑树 枫树

红黑树 枫树

红黑树的特征有什么呢

  1. 顾名思义红黑树就是有红有黑的树(哇参天大枫树啊),及有红节点和黑节点组成。
  2. 根节点是黑色的
  3. 每个叶子结点都是黑色的空节点
  4. 每个红色节点的两个子节点都是黑色的
  5. 从任意节点到其每个叶子结点的所有路径都包含相同数目的黑色节点。
    下图就是一颗典型的红黑树:
    在这里插入图片描述
    上面这五条规则也保证了红黑树的自平衡。红黑树从很到叶子的最长路径不会超过最短路径的2倍
    当然当插入或者删除的时候,就会破坏我们的红黑树的结构,那么怎么办呢?不要慌问题不大,有两种方法:1. 变色。2. 旋转
    要了解这些东西,我们要先了解左旋和右旋这两个东西。
    左旋转:也叫逆时针旋转
    在这里插入图片描述
    总而言之就是X和Y进行的旋转,由于X变为Y的左子树之后,Y就有了3个孩子,因此,Y需要将左子树b给X当右子树。
    右旋转:也叫顺时针旋转
    在这里插入图片描述
    简单的来说就是X和Y进行的旋转,由于X变为Y的右子树之后,Y就有了3个孩子,因此,Y需要将右子树c给X当左子树。
    知道了这些之后,我们就来看一下红黑树具体是怎么变得吧。
    我们以刚才插入节点21的情况为例:
    在这里插入图片描述
    首先我们需要做的是变色,把节点25及其下方的节点变色:(首先我们有两种方案,第一种21变为黑色的,但是我们从25开始到叶子结点的路径经过的黑色节点数不同,因此排除。)第二种如下图:
    在这里插入图片描述
    此时节点17和节点25是连续的两个红色节点,那么把节点17变成黑色节点?恐怕不合适。这样一来不但打破了规则4,而且根据规则2(根节点是黑色),也不可能把节点13变成红色节点。
    变色已无法解决问题,我们把节点13看做X,把节点17看做Y,像刚才的示意图那样进行左旋转:
    在这里插入图片描述
    的到下图:
    在这里插入图片描述
    由于根节点必须是黑色节点,所以需要变色,变色结果如下:
    在这里插入图片描述
    这样就结束了吗?并没有。因为其中两条路径(17 -> 8 -> 6 -> NIL)的黑色节点个数是4,其他路径的黑色节点个数是3,不符合规则5。

这时候我们需要把节点13看做X,节点8看做Y,像刚才的示意图那样进行右旋转:
在这里插入图片描述
得到下图:
在这里插入图片描述
最后根据规则来进行变色:
在这里插入图片描述
如此一来,我们的红黑树变得重新符合规则。这一个例子的调整过程比较复杂,经历了如下步骤:

变色 -> 左旋转 -> 变色 -> 右旋转 -> 变色

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号