AVL树中的范围删除

时间:2018-08-11 05:38:50

标签: python-3.x range avl-tree

我需要删除AVL树中的范围。目前,我正在实现一个删除键小于low的所有节点的函数。但是,我的代码无法正常工作,并且某些节点仍未删除。

有趣的是,似乎只有一个与lowhigh最近的无效节点,用于deleteLessThan和deleteGreaterThan。

Source Code for my AVL Tree

更具体地说,是完整的代码:

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.leftroot.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仍然存在。 (测试代码)

0 个答案:

没有答案