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如何通过引用传递参数的东西?但我现在很困惑.提前谢谢了.
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)