【发布时间】:2014-01-15 19:57:23
【问题描述】:
我尝试在 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
当我尝试使用上述方法删除叶节点时。我失败了。当方法返回时,它对原始 BST 没有任何作用。那么这段代码有什么问题呢?我认为它应该有一些关于 python 如何通过引用传递参数的信息?但我现在很困惑。 提前谢谢了。
【问题讨论】:
-
这里没有代码可以从你的树中删除任何东西。您可能需要切断父母和孩子之间的联系
-
但是我将叶子节点的目标节点设置为None,它也应该改变原来的树,对吧?
-
Python 已经通过引用传递了值;它从不默默地复制任何东西。但它不会通过引用传递 variables ,因为那将毫无意义; Python 变量不是内存位置,它们只是某个命名空间中的名称。
-
@lexie,不,target 只是你的
delete函数中的一个局部变量,你将它设置为 None。 -
@nos:我认为 OP 明白这一点,否则他不会问这个问题;他只是不明白为什么这是真的,或者他应该怎么做。