如何从树中删除节点。我正在尝试从函数中删除节点,但即使删除后它仍然在打印
How to delete a node from a tree. I am trying to delete the node from the function but still it is getting print even after deleting
我正在从删除函数中删除节点,当在函数中打印它时,它显示它的 None
但是当函数完成后它会打印值
请纠正我,告诉我这段代码有什么问题
注意:Class节点只有init方法,其他函数在class
之外
class Node:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
def printit(obj):
if obj:
printit(obj.left)
print(obj.data)
printit(obj.right)
return
def insert(obj, data):
if obj.left == None:
obj.left = Node(data)
return
if obj.right == None:
obj.right = Node(data)
return
insert(obj.left, data)
def delet(obj):
if obj.left == None:
obj= None
return
delet(obj.left)
f = Node(50)
f.left = Node(15)
f.right = Node(75)
delet(f)
printit(f)
obj= None
仅影响 name 的值。它不会影响与 obj
.
的先前值相关的任何内容
如果要更改树结构,则必须分配给 属性,而不是分配给变量名。
再想一想当 最后一个 节点被删除时会发生什么:然后主程序应该将其 f
设置为 None
。这只有在你 return 调用者可以分配回他们自己的变量的东西时才会发生。
例如:
def delet(obj):
if obj.right is not None:
obj.right = delet(obj.right)
elif obj.left is not None:
obj.left = delet(obj.left)
else:
return None
return obj
然后您还应该在主代码中使用 returned 值:
f = Node(50)
f.left = Node(15)
f.right = Node(75)
printit(f)
print("---")
f = delet(f)
printit(f)
print("---")
f = delet(f)
printit(f)
print("---")
f = delet(f)
printit(f)
print("---")
我正在从删除函数中删除节点,当在函数中打印它时,它显示它的 None
但是当函数完成后它会打印值 请纠正我,告诉我这段代码有什么问题
注意:Class节点只有init方法,其他函数在class
之外class Node:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
def printit(obj):
if obj:
printit(obj.left)
print(obj.data)
printit(obj.right)
return
def insert(obj, data):
if obj.left == None:
obj.left = Node(data)
return
if obj.right == None:
obj.right = Node(data)
return
insert(obj.left, data)
def delet(obj):
if obj.left == None:
obj= None
return
delet(obj.left)
f = Node(50)
f.left = Node(15)
f.right = Node(75)
delet(f)
printit(f)
obj= None
仅影响 name 的值。它不会影响与 obj
.
如果要更改树结构,则必须分配给 属性,而不是分配给变量名。
再想一想当 最后一个 节点被删除时会发生什么:然后主程序应该将其 f
设置为 None
。这只有在你 return 调用者可以分配回他们自己的变量的东西时才会发生。
例如:
def delet(obj):
if obj.right is not None:
obj.right = delet(obj.right)
elif obj.left is not None:
obj.left = delet(obj.left)
else:
return None
return obj
然后您还应该在主代码中使用 returned 值:
f = Node(50)
f.left = Node(15)
f.right = Node(75)
printit(f)
print("---")
f = delet(f)
printit(f)
print("---")
f = delet(f)
printit(f)
print("---")
f = delet(f)
printit(f)
print("---")