红黑树来说点别人没说过的东西(一)

问题1:红黑树中的黑色节点是怎么出现的,怎么增加的?

  • 1.第一个黑色的节点产生于根
  • 2.之后的黑色节点来自于case 1, 既新插入的红色节点的parent和uncle都为红

a. parent 为红, uncle为红, 则可以推算出gParent为黑(红色的节点不可能相连)
b. 红色节点插入以后, parent和uncle变为黑色, gParent变为红色
c. gParent变红, 黑色-1; parent变黑, uncle变黑, 黑色+2 ===> 黑色节点的总数+1
d. Summary:

  1. 变色并不会影响从gParent出发到其所有子树叶节点路径上的黑节点数
  2. 原来gParent为黑,但是parent和uncle为红;现在gParent为红,parent和uncle为黑,所以黑色的节点数保持不变
  3. 变色会break红黑树的定义,gParent本来为黑,所以parent(gParent)为红或者黑均可以,但是gParent变红以后, parent(gParent)就只能为黑了,所以可能需要进一步变色或者rotation

问题2:rotation的正确性?

  • 答案:正确,且rotation并不会产生rule violation的情况
  • 1.rightRotation
   ggp                 ggp             a. rightRotation rotation之前ggp的颜色未知, gp的颜色必为黑,因为发生rotation时,p为红,u为黑
    |                   |              b. rightRotation rotation过后新的gp为变成黑色的pR
   gp(B)               pR(B)           c. 曾经的gp变色为红, uB保持不变  
   / \                 / \             d. 原来ggp - gp - pr - nr上的黑色点数为1
  pR  uB              NR  gp(R)           ggp - gp - pr - ?0 上的黑色点数为1 + 黑色点数(?0)
  /\   /\                 /\              ggp - gp - ub - ?1 / ?2 上的黑色点数为2 + 黑色点数(?1 / ?2)
NR ?0 ?1 ?2             ?0  uB         e. 变化过后 ggp - pr - nr 上的黑色点数为1
                            /\            ggp - pr - gp - ?0上的黑色点数为1 + 黑色点数(?0)
                           ?1 ?2          ggp - pr - ub - ?1 / ?2 上的黑色点数为2 + 黑色点数(?1 / ?2)
                                          由此可知,roatation并没有改变ggp任何子树上的黑色点的个数
  • 2.leftRotation/ rightRotation+leftRotation / leftRotation + rightRotation 同理

问题3: 变色会引发后续操做么?rotation会引发后续操做么?

  • 答案: 变色会。rotation不会。
  • 1.变色后focus从新插入的节点转移到gp,且gp为红。则可能会产生新rule violation,所以有后续操做(同一个位置-gp的颜色被改变了)
  • 2.rotation后没有两个相邻的红色点,且ggp各个子树路径上的黑色点的个数并未发生改变,所以不会产生rule violation,则没有后续操做(同一个位置- gp(B)和pR(B) 的颜色其实没有改变)

一个很有用的可视化操作红黑树的网站:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值