红黑树

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右旋

 

posted on 2019-04-30 11:44  cxhfuujust  阅读(114)  评论(0编辑  收藏  举报

导航