作为一个时间传递活动,我决定在 python中实现一个树(类似)结构。
我实现了一个Node
类(仅用于此处),如下所示:
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
简而言之,
如何从 Node 类“构建”一个 ASCII 树(如上)?
在更长的形式中,
印刷的“逻辑”是:
- 当只有一个孩子时,
|
放在孩子之上。(四) - 否则,每个孩子都有一个
+
上面,(B,C,E,F) - 甚至没有的时候。的孩子,
^
放在父母之下。(一种) - 否则,(有奇数个孩子)
+
放在父母之下。(C)
我一直在考虑从下面开始。我意识到必须给每个孩子打电话,但一直无法实现任何(那种或其他的)任何接近它的东西。