Реализация рекурсивной функции дерева для сбора узлов высшего уровня - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь построить древовидную структуру, в которой я мог бы выбрать любой узел, и младший соответствующий дочерний элемент был бы возвращен в список.Например, если я выберу узел 1, я получу список, содержащий [5, 6, 7, 8, 9].Если выбрать узел 2, я получу [5, 6, 7].Если я выбрал узел 4, я получу только [9].Критерием для определения узлов, которые будут агрегированы, является то, что у них нет дочерних элементов.Представление древовидной структуры выглядит следующим образом:

Tree structure representation

До сих пор я пытался это реализовать:

class Node(object):
    def __init__(self, value=None):
        self.children = []
        self.value = value

    def __repr__(self):
        return str(self.value)

    def add_child(self, obj):
        self.children.append(obj)

    @property
    def ChildElements(self):
       return [Node(a) for a in self.children]

    @property
    def GetValue(self):
        return self.value

def node_recurse_generator(node):
    yield node.value
    for n in node.ChildElements:
        yield from node_recurse_generator(n)

Затем я определяю небольшую древовидную структуру:

a = Node('a')
b = Node('b')
c = Node('c')
d = Node('d')

a.add_child([b, c])
c.add_child(d)

list(node_recurse_generator(a))

##Yields ['a', [b, c]]

Может быть, есть лучший способ сделать это?

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