Как заменить узел в n-арном дереве в python? - PullRequest
1 голос
/ 03 марта 2020

Я создал n-арное дерево, используя python. Древовидная структура выглядит следующим образом:

class Tree:
    def __init__(self, data=None):
        self.data=data
        self.child=[]

Я хочу заменить узел в дереве. Я использую обход предзаказа, чтобы найти узел для замены. Ниже приведен код для замены узла.

    def replace(self, root, node):
        if root is not None:
            if root.data == node.data:
               root=node
               root.child=node.child
               return
            for i in range(0,len(root.child)):
               self.replace(root.child[i], node)

В функции замены узел - это новый "узел", который я хочу заменить в дереве с корнем в "root".

Приведенный выше код не заменяет узел. до и после замены, дерево одно и то же.

Любая помощь приветствуется!

1 Ответ

1 голос
/ 03 марта 2020

Если data и child являются единственными полями объекта Tree, то root.child=node.child в этом случае должно быть достаточно. Так что просто удалите строку root=node, поскольку она просто заменяет локальную переменную root.

Еще одно примечание:

for child in root.child:
    self.replace(child, node)

будет работать так же, как:

for i in range(0,len(root.child)):
    self.replace(root.child[i], node)

но первый больше Pythoni c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...