我目前正在使用自己的AVL实现,但我可以让rotate函数正常工作,因为我无法修改引用传递的树元素。这是我的节点类:
class Node:
def __init__(self, label):
self.label = label
self.left = None
self.rigt = None
self.parent = None
self.height = 0
def getLabel(self):
return self.label
def setLabel(self, label):
self.label = label
def getLeft(self):
return self.left
def setLeft(self, left):
self.left = left
self.left.setParent(self)
self.left.setHeight(self.height + 1)
def getRight(self):
return self.rigt
def setRight(self, right):
self.rigt = right
self.rigt.setParent(self)
self.rigt.setHeight(self.height + 1)
def getParent(self):
return self.parent
def setParent(self, parent):
self.parent = parent
self.height = (self.parent.getHeight() + 1 if
(self.parent is not None) else 0)
def setHeight(self, height):
self.height = height
def getHeight(self):
return self.height
每次插入后,调用函数重新平衡,如果需要则调用旋转函数。旋转函数称为self.rotate(n)
,其中n是不平衡节点,函数旋转是
def rotate_right(self, node):
n = Node(node.getLabel())
n.setRight(node.getRight())
n.setLeft(Node(node.getParent))
node.setParent(n)
但是当我尝试在旋转后打印树时,它保持相同的状态,看起来旋转不起作用,但旋转方法中的快速打印显示它正常工作。