Python 二叉搜索树的remove方法不起任何作用 类二进制节点: 定义初始值(自身,值): self.data=值 self.left=无 self.right=无 def包含(根,值): 如果root为None: 返回错误 如果值==root.data: 返回真值 如果值根数据: 如果root.right为无: root.right=BinaryNode(值) 其他: 返回插入(root.right,value) 其他: 如果root.left为无: root.left=二进制节点(值) 其他: 返回插入(root.left,值) def getMin(根目录): 如果root.left为无: 返回root.data 返回getMin(root.left) def删除(根、值、父项=无): 如果root为None: 返回错误 elif值root.data和root.right不是无: 返回删除(root.right、value、root) 其他: 如果parent.left不是None,parent.right是None和\ root.left为无,root.right为无: 根=无 parent.left=根 def索引(根): 如果root不是None: 顺序(根.左) 打印(root.data) 顺序(root.right) b=二进制节点(10) 插入(b,8) 插入(b,11) 移除(b,11) 顺序(b)

Python 二叉搜索树的remove方法不起任何作用 类二进制节点: 定义初始值(自身,值): self.data=值 self.left=无 self.right=无 def包含(根,值): 如果root为None: 返回错误 如果值==root.data: 返回真值 如果值根数据: 如果root.right为无: root.right=BinaryNode(值) 其他: 返回插入(root.right,value) 其他: 如果root.left为无: root.left=二进制节点(值) 其他: 返回插入(root.left,值) def getMin(根目录): 如果root.left为无: 返回root.data 返回getMin(root.left) def删除(根、值、父项=无): 如果root为None: 返回错误 elif值root.data和root.right不是无: 返回删除(root.right、value、root) 其他: 如果parent.left不是None,parent.right是None和\ root.left为无,root.right为无: 根=无 parent.left=根 def索引(根): 如果root不是None: 顺序(根.左) 打印(root.data) 顺序(root.right) b=二进制节点(10) 插入(b,8) 插入(b,11) 移除(b,11) 顺序(b),python,binary-search-tree,Python,Binary Search Tree,我正在为二叉搜索树编写删除函数,我100%肯定这是正确的实现逻辑。我实现了删除叶节点的最基本情况。这个问题必须与python相关吗?当我尝试删除11时,它仍在按顺序遍历中打印它。删除节点的逻辑缺少必要的步骤。请在下面找到删除节点的代码: class BinaryNode: def __init__(self, value): self.data = value self.left = None self.right = None def contains(root, v

我正在为二叉搜索树编写删除函数,我100%肯定这是正确的实现逻辑。我实现了删除叶节点的最基本情况。这个问题必须与python相关吗?当我尝试删除11时,它仍在按顺序遍历中打印它。

删除节点的逻辑缺少必要的步骤。请在下面找到删除节点的代码:

class BinaryNode:
def __init__(self, value):
    self.data = value
    self.left = None
    self.right = None

def contains(root, value):
    if root is None:
        return False

    if value == root.data:
        return True

    if value < root.data:
        return contains(root.left, value)
    else:
        return contains(root.right, value)


def insert(root, value):
    if root is None:
        root = BinaryNode(value)
    else:
        if value > root.data:
            if root.right is None:
                root.right = BinaryNode(value)
            else:
                return insert(root.right, value)
        else:
            if root.left is None:
                root.left = BinaryNode(value)
            else:
                return insert(root.left, value)

def getMin(root):
    if root.left is None:
        return root.data
    return getMin(root.left)

def remove(root, value, parent = None):
    if root is None:
        return False
    elif value < root.data and root.left is not None:
        return remove(root.left, value, root)
    elif value > root.data and root.right is not None:
        return remove(root.right, value, root)
    else:
        if parent.left is not None and parent.right is None and \
           root.left is None and root.right is None:
               root = None
               parent.left = root



def inorder(root):
    if root is not None:
        inorder(root.left)
        print(root.data)
        inorder(root.right)


b =  BinaryNode(10)
insert(b, 8)
insert(b, 11)

remove(b,11)

inorder(b)
def删除(根、值、父项):
如果root为None:
返回错误
elif值root.data和root.right不是无:
返回删除(root.right、value、root)
其他:
如果值==root.data:
如果root.right不是None:
removeRoot=root.right
而(removoot.left不是None):
帕罗托
removoot=removoot.left
root.data=removoot.data
parRoot.left=无
脱根
elif root.left不是无:
parent.left=root.left
德尔根
其他:
如果parent.right不是None且parent.right.data==root.data:
parent.right=无
elif parent.left不是无:
parent.left=无
德尔根

您是否逐行调试了remove函数的功能?我认为该函数缺少实际删除内容的大部分代码。
def remove(root, value, parent):
    if root is None:
        return False
    elif value < root.data and root.left is not None:
        return remove(root.left, value, root)
    elif value > root.data and root.right is not None:
        return remove(root.right, value, root)
    else:
        if value == root.data:
            if root.right is not None:
                removeRoot = root.right
                while(removeRoot.left is not None):
                    parRoot = removeRoot
                    removeRoot = removeRoot.left
                root.data = removeRoot.data
                parRoot.left = None
                del removeRoot
            elif root.left is not None:
                parent.left = root.left
                del root
            else:
                if parent.right is not None and parent.right.data == root.data:
                    parent.right = None
                elif parent.left is not None:
                    parent.left = None
                del root