- Да, у многих программистов проблемы с визуализацией рекурсии.
- Да, когда рекурсия достигает
Node A
, рекурсия действительно помогает. - Функция прерывается. рекурсия (базовый случай) в операторе
if start:
.
кстати, ваш код, как опубликовано, выводит следующее: A-B-C-D-E-F-G-H-I-
Пример базового случай для ваших данных таков: когда код вводит preorder_print()
с start
, относящимся к Node("A")
, затем if start:
проходит, а следующий оператор - traversal = self.preorder_print(start.left, traversal)
, который передает start.left
на следующий уровень ниже.
Теперь, поскольку Node("A")
имеет для left
и right
значение по умолчанию None
, приведенный выше вызов - nop
и просто возвращает traversal
, поэтому следующий оператор - traversal += str(start.value) + "-"
где start.value
равно "A"
.
Снова следующий оператор traversal = self.preorder_print(start.right, traversal)
- это nop
, а затем return traversal
выходит из этого уровня и поднимается на один уровень.
Теперь мы снова оказываемся в self.preorder_print()
, только что выполнив traversal = self.preorder_print(start.left, traversal)
, где start
относится к Node("B")
, а start.left
относится к Node("A")
.