Я пытаюсь адаптировать этот ответ двумя способами:
- Я хочу сделать функцию обхода методом класса, а
- Я хочу вызов traverse для получения списка всех root путей к листам (списка списков) в дереве
Первое изменение было тривиальным, второе - с которым я борюсь. Вот мое определение класса:
class createnode:
""" thanks to https://stackoverflow.com/a/51911296/1870832"""
def __init__(self,nodeid):
self.nodeid=nodeid
self.child=[]
def __str__(self):
print(f"{self.nodeid}")
def traverse(self, path = []):
path.append(self.nodeid)
if len(self.child) == 0:
#print(path)
yield path
path.pop()
else:
for child in self.child:
child.traverse(path)
path.pop()
Я создаю дерево с:
ROOT_NODE = 0
root = createnode(ROOT_NODE)
lvl1 = [createnode(1), createnode(2), createnode(3)]
root.child += lvl1
root.child[0].child += [createnode(4), createnode(5)]
root.child[1].child += [createnode(6), createnode(7)]
root.child[2].child += [createnode(8), createnode(9)]
Требуемый вывод для печати всех полных root -листных путей (например, с кодом ниже)
paths = root.traverse()
for p in paths:
print(p)
:
[0, 1, 4]
[0, 1, 5]
[0, 2, 6]
[0, 2, 7]
[0, 3, 8]
[0, 3, 9]