2016-03-15 5 views
2

При удалении корня (который сам по себе является листом) в дереве одного узла мне нужно изменить корневой узел как ничто. Я не хочу получить пустой узел self.value = self.left = self.right = None.Настройка корневого узла дерева на None

Я попытался установить self = None, как показано в приведенном ниже коде, но он не работает по какой-либо причине, и удаление (del self) не работает. Его легко удалить листья, потому что вам нужно только установить previous.right = None или previous.left = None и thats it. Но нет никакой ссылки на корень, очевидно, чтобы помочь в этом случае.

Возможно ли изменить тип корня из двоичного узла и сделать его Нет или даже целое или такое? Потому что, как вы видите в коде, настройка самостоятельно не работает

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

Невозможно это сделать. Ссылки на корневой узел хранятся где-то в другом месте (например, локальные переменные в различных пользовательских функциях), и сам класс не может изменить эти ссылки.

Вместо этого вы можете добавить дополнительный слой косвенности между кодом пользователя и корневым узлом. Часто это класс 3, и в дополнение к (корневому) корневому узлу (возможно, None) он также может отслеживать другие полезные вещи, например, сколько значений в дереве.

Смежные вопросы