当在某个节点x上做左旋时,我们假设它的右孩子是y节点并且不为NIL。左旋以x到y之间的轴为支撑,左旋后,y成为该局部新的根,x成为y的做孩子,而y的左孩子成为x的右孩子,即图中的β。我们以一段伪代码说明左旋的过程:
y<-right[x] //把x的右儿子保存为yright[x]<-left[y] //把y的左儿子给x作为右儿子p[left[y]]<-x //把x设为y的左儿子的爸爸,这一步与上一步对应,因为指针都是双向的p[y]<-p[x] //把x的爸爸设定为y的爸爸if p[x]=nil[T] //如果x的爸爸本来就是空的 then root[T]<-y //那么y就变成了根节点 else if x=left[p[x]] //否则,如果原来x是它爸爸的左儿子 then left[p[x]]<-y //就把y设为原来x爸爸的左儿子 else right[p[x]]<-y //不然就把y设为原来x爸爸的右儿子left[y]<-x //x这时候转下来成为y的左儿子p[x]<-y //y 也就成了x的爸爸了
E左旋
S右旋