我需要删除AVL树中的范围。目前,我正在实现一个删除键小于low
的所有节点的函数。但是,我的代码无法正常工作,并且某些节点仍未删除。
有趣的是,似乎只有一个与low
或high
最近的无效节点,用于deleteLessThan和deleteGreaterThan。
更具体地说,是完整的代码:
def deleteLessThan(self, root, high, equal):
if root is None:
return
if root.left is not None:
root.left = self.deleteLessThan(root.left, high, equal)
if root.right is not None:
root.right = self.deleteLessThan(root.right, high, equal)
if root.key < high or (equal and root.key == high):
root = self.delete(root, root.key, None)
return root
4仍然存在。 (测试代码)
测试代码:
tree = AVLTree()
root = None
a = [1, 2, 3, 4, 5, 6, 7]
for i in a:
root = tree.insert(root, i, i)
tree.deleteLessThan(root, 5, False)
print(tree.string(root))
我不确定删除root.left
和root.right
之后是否会更改该问题,尽管我不确定。
这是同一件事,但是顺序不同
def deleteLessThan(self, root, high, equal):
if root is None:
return
if root.key < high or (equal and root.key == high):
root = self.delete(root, root.key, None)
if root is None:
return
if root.left is not None:
root.left = self.deleteLessThan(root.left, high, equal)
if root.right is not None:
root.right = self.deleteLessThan(root.right, high, equal)
return root
3仍然存在。 (测试代码)