Исправить глубину дерева в Python - PullRequest
5 голосов
/ 21 октября 2010

Я хочу реализовать древовидную структуру с фиксированной глубиной, т. Е. При добавлении дочерних элементов к узлам leef вся древовидная структура должна «двигаться вверх».Это также означает, что несколько корней могут существовать одновременно.См. Пример ниже: alt text В этом примере зеленые узлы добавляются в итерации 1, удаляя верхний узел (серый) и делая два синих узла с K = 0 и корневыми узлами итерации 1.

Какя должен осуществить это?

1 Ответ

2 голосов
/ 21 октября 2010

Хранить каждый узел со ссылкой на его родителя. Когда вы добавляете узел в качестве дочернего, подойдите к родителям (из добавляемого узла) и удалите третий, после того как для родительской ссылки во всех его дочерних элементах установлено значение None. Затем добавьте дочерние элементы удаленного узла в список деревьев.

class Node(object):

    depth = 4

    def __init__(self, parent, contents):
        self.parent = parent
        self.contents = contents
        self.children = []


def create_node(trees, parent, contents):
    """Adds a leaf to a specified node in the set of trees.

    Note that it has to have access to the container that holds all of the trees so
    that it can delete the appropriate parent node and add its children as independent 
    trees. Passing it in seems a little ugly. The container of trees could be a class
    with this as a method or you could use a global list. Or something completely
    different. The important thing is that if you don't delete every reference to the
    old root, you'll leak memory.
    """
    parent.children.append(Node(parent, contents))

    i = 0:
    L = Node.depth - 1
    while i < L:
        parent = parent.parent
        if not parent:
            break
        i += 1
    else:
        for node in parent.children:
            node.parent = None
        trees.extend(parent.children)
        i = trees.find(parent)
        del trees[i]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...