美文网首页
红黑树-旋转(未完成)

红黑树-旋转(未完成)

作者: KeDaiBiaO1 | 来源:发表于2017-10-04 15:42 被阅读0次
    ///定义一个全局的空叶子节点  空的
        //root节点
        RbNode root;
        RbNode nil = new RbNode(); 
        public class RbNode {
            //颜色
            public int color;
            //值
            public int key;
            
            //键的链接  需要连接父节点  还有左右节点
            public RbNode  left;
            public RbNode  right;
            //父节点
            public RbNode  p;
        }
        //对x左旋  nil是空的node   
        /**
         *          y
         *         / \  
         *        x   γ
         *       / \
         *      α   β 
         *          
         *      右旋  |↑ 左旋
         *            ↓|
         *  
         *          x
         *         / \
         *        α   y
         *           / \
         *          β   γ           
         * @param tree
         * @param x  对x左旋    y的父节点是x   
         * 
         * y是父节点的右孩子  当前节点是y 然后节点上移到x然后对x操作左旋
         */
        public void left_Rotate(RbNode tree, RbNode x){
            RbNode y = x.right;
            x.right = y.left;//x与y节点之间的键断开  1   
            if(y.left != nil){
                y.left.p = x;//断开y与y左子树    链接x与y左子树(也就是把x的右子树连接y的左子树)2
            }
            y.p = x.p;//链接y到原本x的父节点上(因为1断开了)3
            
            if(x.p == nil){//4-1
                this.root = y;
            }else if(x == x.p.left){4-2
                x.p.left = y;
            }else{
                //3的后续  把父节点的right(也可能是根节点4-1或者左节点4-2)连接到y 4-3
                x.p.right = y;
            }
            y.left = x;//链接y和x  y成为x父节点  是左子树   5
            x.p = y;
        }
    

    相关文章

      网友评论

          本文标题:红黑树-旋转(未完成)

          本文链接:https://www.haomeiwen.com/subject/qwkgextx.html