树的旋转,分为左旋和右旋,以下借助图来做形象的解释和介绍:
1.左旋(右子为轴,当前结点左旋)
如上图所示:
当在某个结点pivot上,做左旋操作时,我们假设它的右孩子y不是NIL[T],pivot可以为树内任意右孩子而不是NIL[T]的结点。
左旋以pivot到y之间的链为“支轴”进行,它使y成为该孩子树新的根,而y的左孩子b则成为pivot的右孩子。
来看算法导论对此操作的算法实现(以x代替上述的pivot):
LEFT-ROTATE(T,x)
1y←right[x]▹Sety.
2right[x]←left[y]▹Turny's left subtree intox's right subtree.
3p[left[y]]←x
4p[y]←p[x]▹Linkx's parent toy.
5ifp[x] =nil[T]
6thenroot[T]←y
7else ifx=left[p[x]]
8thenleft[p[x]]←y
9elseright[p[x]]←y
10left[y]←x▹Putxony's left.
11p[x]←y
2.右旋
右旋与左旋差不多,再此不做详细介绍。