У меня есть класс Tree
, который состоит из Node
объектов. Каждый Node
имеет следующие экземпляры экземпляров:
name
: строковое имя узла depth
: int глубины узла в дереве (rootимеет глубину 0) parent
: ссылка на родительский объект Node
(родительский корень None
) children
: список всех дочерних объектов Node
(листьяесть пустой список)
Класс Node
также имеет метод get_ancenstors()
, который возвращает список Node
s в пути от родительского элемента Node
к корню. ,
Дерево построено с использованием рекурсивной функции и имеет следующие переменные экземпляра:
root
: ссылка на корень Node
leaves
: список всех листов Node
s
Класс 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
Может кто-нибудь помочь с логикой, стоящей за этим?