红黑树(2)—— 红黑树颜色翻转和右旋转

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/87002185

1 颜色翻转和右旋

1.1 颜色翻转(flipcolors)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • RBTree.java
package tree;

public class RBTree<K extends Comparable<K>, V> {

    private static final boolean RED = true;
    private static final boolean BLACK = false;

    private class Node {
        public K key;
        public V value;
        public Node left, right;
        public boolean color;

        public Node(K key, V value) {
            this.key = key;
            this.value = value;
            left = null;
            right = null;
            color = RED;
        }
    }

    private Node root;
    private int size;

    public RBTree() {
        root = null;
        size = 0;
    }

    public int getSize() {
        return size;
    }

    public boolean isEmpty() {
        return size == 0;
    }

    private boolean isRed(Node node) {
        if (node == null) {
            return BLACK;
        }
        return node.color;
    }

    public void add(K key, V value) {
        root = add(root, key, value);
    }

    /*
     * 向以 node 为根的二分搜索树中插入元素(key,value)
     * 返回插入新节点后二分搜索树的根
     * */
    private Node add(Node node, K key, V value) {
        if (node == null) {
            size++;
            return new Node(key, value);
        }

        if (key.compareTo(node.key) < 0) {
            node.left = add(node.left, key, value);
        } else if (key.compareTo(node.key) > 0) {
            node.right = add(node.right,key,value);
        }else{
            node.value = value;
        }

        return node;

    }


    // 颜色翻转
    private void flipColors(Node node){
        node.color = RED;
        node.left.color = BLACK;
        node.right.color = BLACK;
    }

}

1.2 右旋

在这里插入图片描述

node.left = T1
x.right  = node
x.color = node.color
node.color = RED

在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/87002185