splay_rotate:
inline void rotate(splay_node *x){ splay_node *y,*z;int d1,d2; d1=get_parent(x,y);//三个结点扔过来同时统计d值 d2=get_parent(y,z); if(y->ch[d1]=x->ch[d1^1]) y->ch[d1]->fa=y;//y正x反y正爹 y->fa=x;x->fa=z;x->ch[d1^1]=y;//yx,xz,x反y if(d2!=-1) z->ch[d2]=x;//d2非根z正x y->update();//别忘y要update return; }
y正x反y正爹,yx、xz、x反y,d2非根z正x,别忘y要update。
时间: 2024-10-07 10:02:42