Python删除二进制搜索树中的节点

时间:2019-12-15 08:19:32

标签: python

我正在实现一种迭代解决方案,该方法在给定树根和要删除节点的键的情况下,在BST中删除节点。

我有两个辅助函数,它们返回BST中节点的后继者和前任者。

def successor(root):
    root = root.right
    while root.left:
        root = root.left
    return root

def predecessor(root):
    root = root.left
    while root.right:
        root = root.right
    return root

在我的主要功能中,我首先搜索目标节点,然后搜索要替换目标节点的节点,更改值,然后删除(将其设置为None)后继/前任节点。

def deleteNode(self, root: TreeNode, key: int) -> TreeNode:

        if not root:
            return None
        dummy = TreeNode(-1)
        dummy.left = root
        while root:
            if root.val < key:
                root = root.right
            elif root.val > key:
                root = root.left
            elif root.val == key:
                break

        if not root.left and not root.right:
            root = None
        elif root.right:
            succ = successor(root)
            root.val = succ.val
            root = root.right
            while root.left:
                root = root.left
            root = None
        elif root.left:
            pred = predecessor(root)
            root.val = succ.val
            pred = None
            root = root.left
            while root.right:
                root = root.right
            root = None
        return dummy.left

但是,由于某些原因,即使我转到该节点并将其设置为None,前任/后继节点也不会被删除。我在这里想念东西吗?

谢谢

0 个答案:

没有答案