2015-03-31 5 views
0

Если задано дерево с узлами с целыми числами: 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». Он должен сначала: дублировать все пути от корневых листьев; second: возвращает список исключительно для конечного числа каждого пути.

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

+0

Вы пытаетесь подсчитать количество путей? или вы пытаетесь перечислить все пути? – inspectorG4dget

+0

На самом деле не совсем понятно, чего вы пытаетесь достичь. Например, вы сказали (1 ~ 10), что означает вывод '{1: 1, 2: 5}'? Каковы ключи и какие значения? – khajvah

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^