【发布时间】:2019-10-29 13:39:04
【问题描述】:
我有一个 Tree 类,它由 Node 对象组成。每个Node 都有以下实例变量:
-
name: 节点的字符串名称 -
depth:树中节点深度的int(根深度为0) -
parent:引用父对象Node(根的父对象是None) -
children:所有子Node对象的列表(叶子有一个空列表)
Node 类还有一个方法get_ancenstors(),它返回从Node 的父级到根的路径中的Nodes 列表。
树是使用递归函数构建的,并具有以下实例变量:
-
root:引用根Node -
leaves:所有叶子列表Nodes
Tree 类有一个方法dfs(),它执行树的深度优先搜索/遍历并产生每个访问的Node。它也有一个__str__() 方法:
def __str__(self):
string = ''
for dir in self.dfs(self.root):
# TODO: Create branches as '|-'
branches = (' ' * (dir.depth))
string += f'{branches}{dir.name}\n'
return string
产生如下输出:
Dir 1
Dir 2
Dir 3
Dir 4
Dir 5
Dir 6
Dir 7
Dir 8
Dir 9
Dir 10
相反,我想要这个__str__() 方法的视觉更清晰但更复杂的实现,它会产生如下输出:
Dir 1
|--- Dir 2
| |--- Dir 3
|
|--- Dir 4
| |--- Dir 5
| | |--- Dir 6
| | |--- Dir 7
| |
| |--- Dir 8
|
|--- Dir 9
|--- Dir 10
|--- Dir 11
|--- Dir 12
谁能帮忙解释一下这背后的逻辑?
【问题讨论】: