https://www.jianshu.com/p/3958a1a11cb0
https://www.jianshu.com/p/0eaea4cc5619
https://www.cnblogs.com/xrq730/p/6867924.html
https://blog.csdn.net/sun_tttt/article/details/65445754
当在某个节点x上做左旋时,我们假设它的右孩子是y节点并且不为NIL。左旋以x到y之间的轴为支撑,左旋后,y成为该局部新的根,x成为y的做孩子,而y的左孩子成为x的右孩子,即图中的β。我们以一段伪代码说明左旋的过程:
y<-right[x] //把x的右儿子保存为y right[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右旋