Jako aktywność w czasie, postanowiłem zaimplementować strukturę (podobną) do Pythona w postaci Tree (podobnej).
I wdrożone Node
klasy (który sam służy tutaj) tak:Wyświetlanie drzewa w 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
Jak widać funkcja display
nie jest realizowany.
Oto przykład drzewa.
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')
Oto przykładowe wyjście dla display
.
>>> A.display()
A
+-^-+
B C
| +-+-+
D E F G
>>> C.display()
C
+-+-+
E F G
W najkrótszej formie
Jak można „budować” drzewko ASCII (jak wyżej) z klasy Node ??
W dłuższej formie
„logika” druku jest:
- Kiedy jest tylko jedno dziecko,
|
kładzie się nad dzieckiem. (D) - W przeciwnym razie, każde dziecko ma nad nim
+
(B, C, E, F) - Kiedy nie ma nawet. dzieci,
^
znajduje się poniżej rodzica. (A) - W przeciwnym razie (liczba dzieci jest nieparzysta)
+
jest umieszczany pod rodzicem. (C)
Myślałem o zaczynaniu od dołu. Zdałem sobie sprawę, że musi być wezwanie do każdego z dzieci, ale nie były w stanie wdrożyć niczego (tego rodzaju lub w inny sposób), które dał coś blisko.
Jeśli jest to ćwiczenie trzeba naprawdę próbują go przez siebie, dowiesz się znacznie lepiej – jamylak
„[Rysunek reprezentacyjny drzewa] (http://billmill.org/pymag-trees/) "Bill Mill jest tym, czego użyłem kilka tygodni temu, kiedy miałem podobny problem. Wynika to z podstawowego algorytmu i dodaje ograniczenia do niektórych właściwości, których wynik musi spełniać, dodając złożoności w kilku krokach. To świetny artykuł, a przykłady są raczej "ogólne". Sprawdź to. – Mariano
@jamylak To jest self "ćwiczenie", więc, nie sądzę, zadając to pytanie, utrudni moje umiejętności lub uczenia się .. I, mam również wiele zepsutych prób. Przeczytaj także pierwszą linię ... – pradyunsg