数据结构 玩转数据结构 13-6 颜色翻转和右旋转

发布时间 2023-05-06 07:02:18作者: 菜鸟乙

0    课程地址

https://coding.imooc.com/lesson/207.html#mid=15184

 

1    重点关注

1.1    红黑树本节解析草图

1为颜色翻转(4节点(有4个子节点)拆分为3个2节点);

2为右旋转,4节点右旋转,未进行拆分;

他们都是子过程

 

 

 

 

 

2    课程内容

 

 

3    Coding

3.1    红黑树部分关键代码

 

 /**
     * 颜色翻转
     * @author weidoudou
     * @date 2023/5/6 6:37
     * @param node 请添加参数描述
     * @return void
     **/
    private void flipColors(Node node){
        node.left.color = BLACK;
        node.right.color = BLACK;
        node.color = RED;
    }

    //   node                     x
    //  /   \     左旋转         /  \
    // T1   x   --------->   node   T3
    //     / \              /   \
    //    T2 T3            T1   T2
    private Node leftRotate(Node node) {
        Node x = node.right;
        Node T2 = x.left;

        // 向左旋转过程
        node.right = T2;
        x.left = node;

        // 更新color
        x.color = node.color;
        node.color = RED;

        return x;
    }

    //     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;
    }