在进行树中元素的插入与删除操作之后,可能会违反红黑性质,为了维护这些性质,必须改变树中某些节点的颜色以及指针结构。
其中,指针结构的修改是通过旋转来完成的。
LEFT-ROTATE(T,x)
y= x.right //set y
x.right = y.left //link y left as x right
if (y.left != NIL)
y.left.p = x //link y left parent as x
y.p = x.p //link y parent as x parent
if (x.p == NIL) //x root, so, y take root
T.root = y
elseif (x.p.left == x) //x is left, so y take left
x.p.left = y
else
x.p.right = y //x is right, so y take right
y.left = x //y left is x
x.p = y //x parent is y
RIGHT_ROTATE(T,y)
x = y.left
y.left = x.right
if (x.right != NIL)
x.right.p = y
x.p = y.p
if(y.p == NIL)
T.root = x
elseif(y.p.left == y)
y.p.left = x
else
y.p.right = x
x.right = y
y.p = x