Подсчет всех узлов всех путей от корня до листьев

Если дано дерево с узлами с целыми числами: 1 ~ 10 и коэффициентом ветвления 3 для всех узлов, как я могу написать функцию, которая проходит через дерево, считая от корня до листьев для КАЖДОГО пути?

Итак, для этого примера, скажем, нужно вернуть это:

{1: 1, 2: 5}

Я пробовал эту вспомогательную функцию:

def tree_lengths(t):
    temp = []
    for i in t.children:
        temp.append(1)
        temp += [e + 1 for e in tree_lengths(i)]
    return temp

Слишком много ошибок с этим кодом. С одной стороны, он оставляет отпечатки каждого посещенного узла в обходе в возвращаемом списке - поэтому трудно определить, какие значения мне нужны из этого списка. С другой стороны, если дерево большое, оно не оставляет отпечатков корневого и более ранних узлов в пути до достижения строки "для i в t.children". Для этого нужно сначала: продублировать все пути от корневых листьев; второе: вернуть список исключительно для конечного числа каждого пути.

Пожалуйста помоги! Это так сложно.

1 ответ

Я не совсем уверен, что именно вы пытаетесь сделать, но вам, вероятно, потребуется определить рекурсивную функцию, которая принимает узел (верхушка дерева или поддерева) и целое число (количество дочерних элементов, которые вы пересекали, так что далеко), и, возможно, список каждого посещенного узла до сих пор. Если у узла нет дочерних элементов, вы достигли листа и можете распечатать любую информацию, которая вам нужна. В противном случае для каждого дочернего элемента вызовите эту рекурсивную функцию еще раз с новыми параметрами (+1 к числу, дочерний узел в качестве главного узла и т. Д.).

Другие вопросы по тегам