如何从树中删除节点。我正在尝试从函数中删除节点,但即使删除后它仍然在打印

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("---")