
实现这种打印的关键在于遍历树时判断当前节点是否为父节点的最后一个子节点!!!
class Tree:
class Node:
def __init__(self, name):
self.name = name
self.children = []
def add_child(self, child):
if child not in self.children:
self.children.append(child)
def __repr__(self,):
return str(self.name)
def __init__(self, root_name, edges):
self.edges = edges
self.root = self._build_tree(root_name)
self.tree_plot = ''
def _build_tree(self, root_name):
root = self.Node(root_name)
for e in self.edges:
if e[0] == root_name:
root.add_child(self._build_tree(e[1]))
return root
def _tree(self, node, prefix=[]):
space = ' '
branch = '│ '
tee = '├─ '
last = '└─ '
if len(prefix)==0:
self.tree_plot = ''
self.tree_plot += ''.join(prefix) + str(node) + '\n'
if len(prefix)>0:
prefix[-1] = branch if prefix[-1] == tee else space
for i, e in enumerate(node.children):
if i <len(node.children)-1:
self._tree(e, prefix+ [tee])
else:
self._tree(e, prefix+[last])
return self.tree_plot
def __repr__(self):
return self._tree(self.root)
edges = [(0,1),(1,2),(1,3),(1,4),(0,5),(5,6),(5,7)]
print(Tree(0, edges))
这段代码定义了一个`Tree`类,用于构建并打印树形结构。它使用递归方式遍历树,并通过`_tree`方法绘制树的结构。输入参数`edges`表示树的边,`root_name`是树的根节点。输出结果是树的图形表示。
495

被折叠的 条评论
为什么被折叠?



