タイムパスアクティビティとして、Python でTree (like) 構造を実装することにしました。
次のようにクラスを実装しました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 ツリーを「構築」するにはどうすればよいですか??
より長い形式で
は、印刷の「ロジック」は次のとおりです。
- 子が 1 人だけの場合は
|
、子の上に置かれます。(ニ) - それ以外の場合、すべての子にはその
+
上に (B、C、E、F) があります。 - さえないとき。親
^
の下に配置されます。(ア) - そうでなければ、(子の数が奇数です)
+
は親の下に置かれます。(ハ)
下から考えてみました。私は、それぞれの子への呼び出しが必要であることに気付きましたが、それに近いものを提供するもの (そのようなものまたはその他のもの) を実装することができませんでした。