在一个节点树中删除根(恰好是一个叶子本身)时,我需要将根节点更改为None。我不想得到self.value = self.left = self.right = None的空节点。
我尝试设置self = None,如下面的代码所示,但由于某种原因它不起作用,也不删除(del self)。它很容易删除叶子,因为你只需要设置previous.right = None或previous.left = None就可以了。但是,根本没有提及根本可以帮助解决这个问题。
甚至可以从二进制节点更改根的类型并使其成为None或甚至是整数等?因为正如您在代码中看到的那样,设置self不起作用
class BinaryNode:
def __init__(self, value, left = None, right = None):
'''
Initiate a Binary-tree
:param value: float | int | str
:return: None
'''
self.value = value
self.left = left
self.right = right
def delete_root(self):
'''
Delete the root of the tree
:return: None
'''
if not(self.right or self.left): #Base case: the root is childless
self = None #Doesnt work!!!
else:
self.left.get_max() #get_max is a method that replaces the root with a leaf
答案 0 :(得分:1)
你无法做到这一点。对根节点的引用保存在其他地方(例如各种用户函数中的局部变量),并且类本身不能更改这些引用。
您可能想要做的是在用户代码和根节点之间添加一个额外的间接层。通常这是某种Tree
类,除了(可能None
)根节点引用之外,它还可以跟踪其他有用的东西,例如树中有多少个值。