在删除单节点树中的根(恰好是叶本身)时,我需要将根节点更改为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发布于 2016-03-16 04:59:38
你不可能做到的。对根节点的引用保存在其他地方(例如各种用户函数中的局部变量),类本身不能更改这些引用。
相反,您可能希望在用户代码和根节点之间添加额外的间接层。这通常是某种类型的Tree类,除了(可能是None)根节点引用之外,它还可以跟踪其他有用的内容,比如树中有多少值。
https://stackoverflow.com/questions/36020662
复制相似问题