Сколько обходов нужно знать, чтобы построить BST

я очень смущен рядом статей на разных сайтах относительно построения Binary Search Tree из любого одного обхода (pre,post или in-order), или сочетание любых двух из них. Например, в этой страница, в ней говорится, что учитывая pre,post или level заказать обход, вместе с in-order обход, можно построить BST. Но!--36-->здесь и здесь, они показывают нам построить BST С . Кроме того,здесь они показывают нам, как построить BST из pre и post-order обходы. На каком-то другом сайте я нашел решение для построения BST С

2 ответов


чтобы построить BST, вам нужен только один (не по порядку) обход.

в общем, чтобы построить двоичное дерево, вам понадобятся два обхода, например, по порядку и по предварительному заказу. Однако для частного случая BST-обход по порядку всегда является отсортированным массивом, содержащим элементы, поэтому вы всегда можете его восстановить и использовать алгоритм для восстановления общего дерева из обходов по порядку и по порядку.

Итак, информация о том, что дерево является BST, вместе с элементами в нем (даже неупорядоченными) эквивалентны обходу по порядку.

бонус: почему одного обхода недостаточно для общего дерева (без информации это BST)?
ответ: предположим, у нас есть n отдельные элементы. Есть n! возможные списки эти n элементы, однако-возможное количество деревьев намного больше (2 * n! возможные деревья для n элементов-это все гнилые деревья, такие, что node.right = null в каждом узле, таким образом, дерево на самом деле является списком справа. Есть n! такие деревья, и еще N! деревья, где всегда node.left = null ) таким образом, из принципа голубиной норы - есть хотя бы один список, который генерирует 2 дерева, поэтому мы не можем восстановить дерево из одного обхода. (QED)


Если заданы значения для узлов BST, то достаточно только одного обхода, потому что остальные данные предоставляются значениями узлов. Но если значения неизвестны, то, как я понимаю, построение уникального BST из одного обхода невозможно. Однако я открыт для предложений.