Я не уверен, как решить эту проблему с помощью рекурсии, но приведенное ниже решение может работать для вас.Поскольку вы уже вытянули конечные узлы и перешли к родительскому узлу, я добавил кортеж «childvalues» для отслеживания родителя и его значения для каждого дочернего узла.Затем я прошел вверх, чтобы получить каждого родителя одного за другим с результатом умножения
def ancestor(child):
child_weight = 1
childpath = "/" + child
while (child in childvalues):
pathValue = childvalues[child][1]
child_weight = child_weight * pathValue
child = childvalues[child][0]
childpath = childpath + "/" + child
return (childpath, child_weight)
ancestry = [
('b1', 'a0', 0.1),
('c1', 'b5', 0.2),
('b2', 'a0', 0.3),
('b3', 'a1', 0.4),
('b4', 'a1', 0.5),
('b5', 'a2', 0.6),
('a0', 'f0', 0.7),
('a1', 'f0', 0.8),
('a2', 'f0', 0.9),
('b0', 'a0', 0.11),
('c0', 'b5', 0.12),
]
parents = set()
childvalues = {}
for child, parent, value in ancestry:
parents.add(parent)
childvalues[child] = (parent, value)
for leaf_node in (set(childvalues.keys()) - parents):
print(ancestor(leaf_node))