作爲一個時間通過活動,我決定在python中實現一個Tree(like)結構。
我實現了一個Node
類(一個人在這裏起到的目的),像這樣:以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
正如你可以看到display
功能未實現。
下面是一個示例樹。
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')
以下是display
的一些示例輸出。
>>> A.display()
A
+-^-+
B C
| +-+-+
D E F G
>>> C.display()
C
+-+-+
E F G
在最短的形式,
我怎樣才能「打造」的ASCII樹(如上)從Node類?
在一個較長的形式,
的「邏輯」印刷是:
- 當只有一個孩子,
|
子上面放置。 (D) - 否則,每個孩子都有一個
+
以上它,(B,C,E,F) - 當甚至沒有。的兒童,
^
放在家長的下方。 (A) - 否則,(有奇數的孩子)
+
放在父母的下方。 (C)
我一直在想從下面開始。 我意識到必須要給每個孩子打一個電話,但一直無法執行任何(這種或那種)任何接近它的任何東西。
如果這是你應該自己嘗試它的鍛鍊,你會學到好多 – jamylak 2013-03-28 06:17:53
「[畫圖像樣的樹(http://billmill.org/pymag-trees/ )「比爾米爾是幾個星期前我用過類似問題時使用的。它來自基本算法,並且對結果必須符合的某些屬性添加限制,在幾個步驟中增加了複雜性。這是一篇很棒的文章,這些例子非常「通用」。一探究竟。 – Mariano 2013-03-28 06:30:09
@jamylak這是一個自我給予的「鍛鍊」,所以,我不認爲問這個問題,會妨礙我的技能或學習。而且,我也有很多失敗的嘗試。另外,閱讀第一行... – pradyunsg 2013-03-28 08:20:23