Рассмотрим рекурсивную структуру обхода предварительного заказа:
T(r) = [r, T(r->left), T(r->right)]
where T(r) is the preorder traversal of tree rooted at node r
Тогда мы знаем, что корень дерева, описываемого T (r), всегда является первым узлом обхода.
Зная это и зная, что корень всегда выше в дереве, чем его поддеревья, подумайте, как бы вы использовали эту информацию для восстановления дерева. Думай рекурсивно.
Предупреждение: это можно сделать, только если это дерево двоичного поиска , которое ограничивает узлы таким образом, что left-child < root < right-child
В общем, деревья не могут быть восстановлены из одного обхода. См. этот превосходный ресурс для более подробного объяснения.
Неопределенность все еще существует независимо от правила о 0 или 2 детях:
4
/ \
2 5
/ \ / \
1 3 6 7
4
/ \
2 7
/ \
1 3
/ \
5 6
Оба имеют предварительный обход [4 2 1 3 5 6 7]