Рассмотрим произвольное дерево T в качестве четверки (A, B, C , D ), где A - корневой узел, B - корневой узел первого потомка, C является вектором любых непустых дочерних элементов B, а D является вектором любых непустых родных элементов B. Элементы C и D сами являются деревьями.
Любой из A, B, C и D может быть пустым. Если B пусто, то должны быть C и D ; если А, то все.
Так как узлы уникальны, наборы узлов, содержащихся где-либо в пределах C и D , не пересекаются и не содержат ни A, ни B.
Функции pre () и post () генерируют упорядоченные последовательности вида:
pre (T) = [A, B, pre ( C ) , pre ( D ) ]
сообщение (T) = [ сообщение ( C ) , B, сообщение ( D ), A]
где функция, примененная к вектору, определяется как конкатенация последовательностей, полученных в результате применения функции к каждому элементу по очереди.
Теперь рассмотрим случаи:
- если A пусто, выходные данные обеих функций будут пустой последовательностью []
- если B пусто, выходные данные обеих функций просто [A]
- , если C и D пусты, pre (T) = [A, B] и post (T) = [B, A]
- если просто C пусто, pre (T) = [A, B, D '] и post (T) = [B, D '' , A] (где простые числа указывают на некоторую перестановку узлов, содержащихся в D )
- если просто D пусто, pre (T) = [A, B, C '] и post (T) = [ C '' , B, A]
- если ни один не пуст, pre (T) = [A, B, C ', D' ] и post (T) = [ C '' , B, D '' , A]
Во всех случаях мы можем однозначно разделить члены двух выходных последовательностей на соответствующие подпоследовательности, используя A и B (если они есть) в качестве разделителей.
Тогда возникает вопрос: можем ли мы также разделить векторные последовательности? Если мы можем, то каждый из них может быть рекурсивно обработан, и мы закончили.
Поскольку результат pre () всегда будет цепочкой последовательностей , начинающихся с узлов A, а результат post () всегда будет цепочка последовательностей , заканчивающаяся узлами A, мы действительно можем их разделить, при условии , что узлы A никогда не бывают пустыми.
Здесь процесс падает в случае двоичных (или даже любых) деревьев с фиксированными дочерними элементами, которые могут независимо быть пустыми. В нашем случае, однако, мы определили C и D , чтобы они содержали только непустые узлы, поэтому реконструкция гарантированно сработает.
Хм, во всяком случае, я так думаю. Очевидно, это всего лишь аргумент, а не формальное доказательство!