Figure 1.1 和 Figure 1.2 (wikipedia, 2020)动态演示了树的旋转过程。图中所演示的左旋和右旋方向目前是有争议的,个人倾向于用节点运动方向来代表旋转方向。
Figure 1.1 rotation(dynamic)
Figure 1.2 tree rotation(static)
以下是树的左右旋在python中的实现,参考(再见紫罗兰, 2020).
def singleRighttRotate(self,node): # node Q
root=node.left # root = Q.left (也就是P)
node.left=root.right # Q.left = root.right (也就是B)
root.right=node # P.right = Q
node.height=max(self.height(node.right),self.height(node.left))+1
root.height=max(self.height(root.left),node.height)+1
return root # 根节点由node(Q)变为了root(P)
def singleLeftRotate(self,node):
k1=node.right
node.right=k1.left
k1.left=node
node.height=max(self.height(node.right),self.height(node.left))+1
k1.height=max(self.height(k1.right),node.height)+1
return k1
def doubleLeftRotate(self,node):
node.left=self.singleRightRotate(node.left)
return self.singleLeftRotate(node)
def doubleRightRotate(self,node):
node.right=self.singleLeftRotate(node.right)
return self.singleRightRotate(node)
References*
wikipedia: Tree rotation, wikipedia, viewd on 27 Jan, 2020 https://upload.wikimedia.org/wikipedia/commons/3/31/Tree_rotation_animation_250x250.gif/
再见紫罗兰: AVL树的python实现, cnblog, viewd on 27 Jan, 2020
https://www.cnblogs.com/linxiyue/p/3659448.html/