SoT
Сен. 23, 2013 17:09:00
Задаётся глубина дерева n. Для простоты пусть у дерева будет по 5 ответвлений от каждого уровня. Реализация дерева через вложенные списки. Назовём общий список levels. Пусть на первом уровне лежит общее слово, например “Имена”. От levels будет отходить 5 элементов, например 5 слов Маша, Вася, Петя, Ира, Коля. Т.е. levels=Маша, levels = Коля. На следующем уровне level будет 5 ответвлений, для которых Маша, Вася, Петя, Ира, Коля родители. Я могу написать алгоритм на заранее известное число уровней : один, два, три. Но Общий алгоритм на любое число уровней ( от двух до бесконечности теоретически ) мне пока никак не даётся. Подскажите как это возможно реализовать на python?
Euler
Сен. 23, 2013 20:17:08
Через рекурсию. Глубину надо явно или неявно передать в функцию, которая для каждой ветви вызовет себя снова, уменьшив значение глубины на единицу и так пока глубина не станет равной нулю.
SoT
Сен. 23, 2013 22:42:38
А можно пример рекурсии для дерева? Реализация дерева - список списков, в котором первая цифра ( например level указывает на уровень дерева.
P.s. А через цикл while никак нельзя это реализовать? я подлня ломал мозги над этим
Euler
Сен. 24, 2013 02:20:21
SoT
А можно пример рекурсии для дерева? Реализация дерева - список списков, в котором первая цифра ( например level указывает на уровень дерева
еслия я правильно понял:
def BuildTree(Depth, BranchesCount, level = 0):
if Depth>1:
return [level]+[BuildTree(Depth-1, BranchesCount, level+1) for x in range(BranchesCount)]
return [level]+['Node'+str(x) for x in range(BranchesCount)]
print(BuildTree(3, 3))
SoT
P.s. А через цикл while никак нельзя это реализовать? я подлня ломал мозги над этим
любой рекурсивный алгоритм можно реализовать итеративно, но только зачем?
SoT
Сен. 24, 2013 21:59:27
Большое спасибо! попробую завтра приспособить под свои нужды