红黑树 结构内部算法解析
2020-12-13 03:14
                         标签:tco   ota   try   父节点   节点   vat   class   bsp   else              红黑树 结构内部算法解析 标签:tco   ota   try   父节点   节点   vat   class   bsp   else    原文地址:https://www.cnblogs.com/softxiaohui/p/11072119.html /** From CLR */
    private void fixAfterInsertion(Entry
while (x != null && x != root && x.parent.color == RED) {
//当前插入节点的父节点是 当前节点祖先节点的 左子节点 进入
            if (parentOf(x) == leftOf(parentOf(parentOf(x)))) {
//得到当前节点祖先节点的右子节点
                Entry
//colorOf(y) 方法如果y==null 是null 返回黑色
                if (colorOf(y) == RED) {
                    setColor(parentOf(x), BLACK);
                    setColor(y, BLACK);
                    setColor(parentOf(parentOf(x)), RED);
                    x = parentOf(parentOf(x));
                } else {
//rightOf(parentOf(x)) 得到当前节点父节点 的右子节点
                    if (x == rightOf(parentOf(x))) {
                        x = parentOf(x);
                        rotateLeft(x);
                    }
//设置父节点为黑色
                    setColor(parentOf(x), BLACK);
//设置祖先节点为红色
                    setColor(parentOf(parentOf(x)), RED);
//进行右旋操作,传入祖先节点
                    rotateRight(parentOf(parentOf(x)));
                }
            } 
else {
                Entry
//根节点改为 黑色
        root.color = BLACK;
    }//右旋
// 什么时候需要 右旋:
// 1: 当前插入节点的父节点 是 祖先节点的左子节点
// 2: 当前插入节点的 右叔父节点 为nil 或黑色
 //或者1: 当前插入节点的父节点 是 祖先节点的右子节点
 /** From CLR */
    private void rotateRight(Entry//左旋  
 /** From CLR */
    private void rotateLeft(Entry