将树的根节点设置为None

时间:2016-03-15 19:42:54

标签: python-3.x

在一个节点树中删除根(恰好是一个叶子本身)时,我需要将根节点更改为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

1 个答案:

答案 0 :(得分:1)

你无法做到这一点。对根节点的引用保存在其他地方(例如各种用户函数中的局部变量),并且类本身不能更改这些引用。

您可能想要做的是在用户代码和根节点之间添加一个额外的间接层。通常这是某种Tree类,除了(可能None)根节点引用之外,它还可以跟踪其他有用的东西,例如树中有多少个值。