2017-03-28 11 views
0

Ich habe die folgenden zwei Klassen für Knoten und BaumWie erstelle ich einen Kombinationsbaum in Python?

Knoten:

class Node: 

    def __init__(self, identifier): 
     self._children = [] 
     self._identifier = identifier 

    def add_children(self, node): 
     self._children.append(node) 

    def get_children(self): 
     return self._children 

Baum mit Ebenen:

class Tree: 
    def __init__(self): 
     self._levels = {} 

    def add_levels(self, index, nodes): 
     self._levels[index] = nodes 

    def __getitem__(self, index): 
     # further stuff 
     return self._levels[index] 

    def __len__(self): 
     return len(self._levels) 

Ich möchte eine Kombination Baum bauen, wie unten gezeigt. Der Identifizierer jedes Knotens ist gegeben n (zum Beispiel ist 12, 13, 23 bekannt). Wie kann ich den Baum rekursiv erstellen, so dass jede Ebene des Baums eine Liste von Knoten enthält?

Tree List of Nodes

+0

Muss dies "rekursiv" gemacht werden? – davedwards

+0

Nicht unbedingt rekursiv. Das ist nur mein Vorschlag. – Alberto

+0

Cool, nun konnte ich den Baum "bauen", wie in der Antwort unten. Gibt es mehr, was getan werden muss? – davedwards

Antwort

-1

die Klassenmethoden verwenden, ich bin in der Lage, einen Baum zu bauen:

root = Node(0) 
n1 = Node(1) 
n2 = Node(2) 
n3 = Node(3) 
n12 = Node(12) 
n13 = Node(13) 
n23 = Node(23) 
n123 = Node(123) 

n12.add_children(n123) 
n1.add_children([n12, n13]) 
n2.add_children(n23) 
root.add_children([n1, n2, n3]) 

t = Tree() 

t.add_levels(0, root) 
t.add_levels(1, [n1, n2, n3]) 
t.add_levels(2, [n12, n13, n23]) 
t.add_levels(3, [n123]) 

aber nicht sicher, wie die Knoten auf Daten zuzugreifen, die nicht ihre Instanzen erhalten:

for l in range(len(t)): 
    print t[l] 

Ausgabe:

<__main__.Node instance at 0x108426098> 
[<__main__.Node instance at 0x108426128>, <__main__.Node instance at 0x108426170>, <__main__.Node instance at 0x1084261b8>] 
[<__main__.Node instance at 0x108426200>, <__main__.Node instance at 0x108426248>, <__main__.Node instance at 0x108426290>] 
[<__main__.Node instance at 0x1084262d8>] 

Aber das beantwortet zumindest deine Frage, wie man den Baum baut.

Hoffe, das hilft.