如何通过引用传递python?

lex*_*xie 0 python pass-by-reference

我试图在BST中实现删除节点.这是我的部分代码.

def delete(node,key):
#Locate that node with value k
    cNode=node
    target=None
    while cNode:
        if cNode.value==key:
            target=cNode
            break
        elif node.value>key:
            cNode=cNode.lChild
        elif node.value<key:
            cNode=cNode.rChild
    target=None
    return node
Run Code Online (Sandbox Code Playgroud)

当我尝试使用上述方法删除叶节点时.我失败了.当方法返回时,它对原始BST没有任何作用.那么这段代码的问题是什么?我假设它应该有关于python如何通过引用传递参数的东西?但我现在很困惑.提前谢谢了.

Mar*_*ers 7

target = None只将变量重新绑定target到新值,None.无论target以前绑定的是什么都不会改变.

您必须跟踪父节点并将其设置为lChild或rChild属性None.

def delete(node,key):
    cNode = node
    target = parent = None
    while cNode:
        if cNode.value == key:
            target = cNode
            break
        elif cNode.value > key:
            parent, cNode = cNode, cNode.lChild
        elif cNode.value < key:
            parent, cNode = cNode, cNode.rChild

    if target:
        if parent:
            if parent.lChild is target:
                parent.lChild = None
            else:
                parent.rChild = None
        else:
            # target is top-level node; perhaps return None in that case?
    return node
Run Code Online (Sandbox Code Playgroud)