Я понимаю, почему буквы [A, B, D] добавляются в список. Но я не понимаю, как добавляются последние две буквы [E, C].
После pre_order («C», узлы) буква «C» не имеет левого потомка, как функция может узнать, что она прошла один шаг до буквы «B» и проверила свои дочерние элементы, и так далее? Смотрите изображение дерева:
дерево
def pre_order(root, nodes):
nodes.append(root.data)
if root and root.left:
pre_order(root.left, nodes)
if root and root.right:
pre_order(root.right, nodes)
return nodes
print(pre_order(root, [])) #prints ['A', 'B', 'D', 'E', 'C']