红黑树 03 添加元素(二)颜色翻转 & 右旋转

本文详细解析了红黑树中颜色翻转和右旋转的触发场景及实现过程,包括新元素添加导致的临时4节点处理,以及红黑树形态与2-3树的对应关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

颜色翻转

  • 颜色翻转过程概述:
    • 颜色翻转的触发场景:向2-3树中的3节点添加元素,新添加的元素要添加到3节点的最右侧;
    • 对应到红黑树中的情形是:新添加的红节点在黑节点右侧,黑节点的左侧还有一个红节点,红黑树中的这种形态对应到2-3树中就是一个临时的4节点;
    • 2-3树中临时的4节点要拆成3个2节点,这种形态对应到红黑树中就是3个黑节点;
    • 2-3树在拆成3个2节点后,要向上融合,3个2节点中间的那个节点是要融合的,所以它是红色的;
    • 最后从结果看,从一添加的“红-黑-红”,到拆完后形成的“黑-红-黑”,正好形成颜色的翻转,即所谓的颜色翻转;
  • 红黑树中涉及的一些结论:
    • 红黑树中,如果一个黑节点左侧没有红色节点的话,它本身就代表2-3树中一个单独的2节点;
    • 3个2节点对应到红黑树中表示的是这3个节点都是黑节点;
    • 2-3树中,临时的4节点在拆完后还要向上融合,融合意味着,2-3树中临时4节点在拆完后向上融合的根,在红黑树中是红色的;

颜色翻转代码

  • 调用该方法的先决条件是:node - 黑,node.left - 红,node.right - 红;
// 颜色翻转
private void flipColors(Node node){
    node.color = RED;
    node.left.color = BLACK;
    node.right.color = BLACK;
}

右旋转

  • 右旋转触发的场景:新添加的元素要融合到3节点的最左边;
  • 对应到红黑树中的场景是:根节点是黑,根节点的左孩子是红,根节点左孩子的左孩子是红;
  • 旋转过后,3个节点还是对应着2-3树中的临时4节点,所以左右2个孩子的颜色都得是红的,红-黑-红,这就对应到了颜色翻转的情况了,继而进行颜色翻转;

右旋转代码

//     node                   x
//    /   \     右旋转       /  \
//   x    T2   ------->   y   node
//  / \                       /  \
// y  T1                     T1  T2
private Node rightRotate(Node node){

    Node x = node.left;

    // 右旋转
    node.left = x.right;
    x.right = node;

    x.color = node.color;
    node.color = RED;

    return x;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值