python如何通过引用传递?
我尝试在BST中实现删除节点。 这是我的部分代码python如何通过引用传递?,python,pass-by-reference,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=cN
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
def delete(节点,键):
#找到值为k的节点
cNode=节点
目标=无
而中海油:
如果cNode.value==键:
目标=cNode
打破
elif节点.值>键:
cNode=cNode.lChild
elif node.valuetarget=None
仅将变量target
重新绑定到新值,None
。以前绑定到的目标
不会改变
您必须跟踪父节点,并将其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
def delete(节点,键):
cNode=节点
目标=父项=无
而中海油:
如果cNode.value==键:
目标=cNode
打破
elif cNode.value>键:
父项,cNode=cNode,cNode.lChild
elif cNode.value<键:
父项,cNode=cNode,cNode.rChild
如果目标是:
如果是家长:
如果parent.lChild是目标:
parent.lChild=无
其他:
parent.rChild=None
其他:
#目标是顶级节点;在这种情况下,可能不返回任何值?
返回节点
这里没有从树中删除任何内容的代码。您可能需要断开父节点和子节点之间的链接,但我将目标节点(即叶节点)设置为“无”,它还应该更改原始树,对吗?Python已经通过引用传递值;它从不默默地复制任何东西。但它不会通过引用传递变量,因为这样做毫无意义;Python变量不是内存位置,它们只是某个名称空间中的名称。@lexie,不,target只是delete
函数中的一个局部变量,您可以将其设置为None。@no:我认为OP理解这一点,否则他不会问这个问题;他只是不明白为什么这是真的,或者他应该怎么做。谢谢Martjin,我明白我的问题。是的,我会的,看起来我只能在2分钟内做到