2010-10-21 18 views
5

Chcę zaimplementować strukturę drzewa, która ma stałą głębokość, tj. Przy dodawaniu dzieci do węzłów leef, cała struktura drzewa powinna "przesuwać się". Oznacza to również, że kilka korzeni może istnieć jednocześnie. Zobacz przykład poniżej: alt text W tym przykładzie zielone węzły są dodawane w iteracji 1, usuwając górny węzeł (szary) i tworząc dwa niebieskie węzły w węzłach głównych K = 0 i Iteracji 1.Napraw głębokość drzewa w Pythonie

Jak mogę to wdrożyć?

Odpowiedz

2

Przechowuj każdy węzeł z odniesieniem do jego obiektu nadrzędnego. Gdy dodajesz do niego węzeł jako dziecko, podejdź do rodziców (z dodanego węzła) i usuń trzeci po ustawieniu odniesienia dla wszystkich jego dzieci na None. Następnie dodaj dzieci z usuniętego węzła do listy drzew.

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] 
+0

To było coś, czego szukałem. Dzięki! – Theodor