Als eine Zeitüberschreitung Aktivität, beschloss ich, eine Tree (like) Struktur in Python zu implementieren.
ich implementiert eine Node
Klasse (die allein dem Zweck dient hier) wie folgt:Anzeigen eines Baums in ASCII
class Node:
def __init__(self, name, parent, *data):
self.name = name
self.parent = parent
self.data = data
self.children = []
self.is_root = False
def __repr__(self):
return 'Node '+repr(self.name)
def dic(self):
retval = {self:[]}
for i in self.children:
retval[self].append(i.dic())
return retval
def display(self): # Here
pass
def has_children(self):
return bool(self.children)
def get_parent(self):
return self.parent
def add_child(self, name, *data):
child = Node(name, self,*data)
self.children.append(child)
return child
Wie Sie die display
Funktion sehen nicht implementiert.
Hier ist ein Beispielbaum.
A = Node('A',Node)
A.is_root = True
B = A.add_child('B')
D = B.add_child('D')
C = A.add_child('C')
E = C.add_child('E')
F = C.add_child('F')
G = C.add_child('G')
Hier ist eine Beispielausgabe für display
.
>>> A.display()
A
+-^-+
B C
| +-+-+
D E F G
>>> C.display()
C
+-+-+
E F G
In kürzester Form,
Wie kann ich "bauen" ein ASCII-Baum (wie oben) von der Node-Klasse ??
In einer längeren Form,
Die "Logik" des Druckens:
- Wenn dort nur ein Kind ist,
|
über dem Kind gestellt. (D) - Sonst, Jedes Kind hat eine
+
darüber, (B, C, E, F) - Wenn es auch keine gibt. von Kindern,
^
wird unter dem Elternteil gesetzt. (A) - Sonst, (es gibt ungerade Nr. Von Kindern)
+
wird unter dem Elternteil gesetzt. (C)
Ich habe überlegt, von unten zu beginnen. Ich erkannte, dass es einen Aufruf an jedes der Kinder geben muss, aber war nicht in der Lage, irgendetwas (von dieser Art oder auf andere Weise) zu implementieren, die irgendetwas nahelegte.
Wenn dies eine Übung ist, dass Sie wirklich, es selbst versuchen sollten, werden Sie lernen, viel besser – jamylak
„[Zeichnung vorzeigbar Bäume] (http://billmill.org/pymag-trees/) "von Bill Mill habe ich vor ein paar Wochen benutzt, als ich ein ähnliches Problem hatte. Es geht von einem Basisalgorithmus aus und fügt Beschränkungen für einige Eigenschaften hinzu, denen das Ergebnis entsprechen muss, wodurch die Komplexität in mehreren Schritten erhöht wird. Es ist ein großartiger Artikel, und die Beispiele sind ziemlich "generisch". Hör zu. – Mariano
@jamylak Dies ist eine selbstgegebene "Übung". Also denke ich nicht, dass ich diese Frage stelle, meine Fähigkeiten behindern oder lernen werde. Und ich habe auch viele kaputte Versuche. Lesen Sie auch die erste Zeile ... – pradyunsg