Определить структурную эквивалентность БСТ со стандартным обходом
Можно ли решить структурную эквивалентность двух бинарных деревьев поиска только с результатами обходов, до порядка, в порядке и после порядка. Предположим, что у меня есть только результирующие массивы всех обходов. Я знаю, что в порядке обхода один, не могу помочь. Но, я не мог визуализировать для других результатов обхода. Я понимаю, что BFS помогает. Я хочу знать, для предварительного и последующего прохождения заказа. И если возможно, пожалуйста, разместите любые ссылки на это.
2 ответа:
Ответ таков: Вы можете восстановить бинарное дерево поиска из его предварительного обхода порядка .
Я не уверен, что у вас есть математическое образование, поэтому, пожалуйста, спросите, нужно ли вам больше объяснений. Для простоты я предполагаю, что узел помечен целым числом 1,2... n, где n-номер узла. Тогда предварительный обход дерева t дает вам перестановку[n] = {1,2,...,n}
, которая имеет определенное свойство: каждый раз, когда у вас есть буква b в вашей перестановке, вы не могу найти две последовательные буквыca
послеb
в перестановке, такой чтоa<b<c
. Такая перестановка, как говорят, избегает шаблонаb-ac
(подставка для произвольного числа букв).Например, 4 2 1 3 избегает b-ac, тогда как 3 1 4 2 этого не делает, потому что 3 - 4 2.
Это фактически эквивалентность: перестановка - это предварительное чтение дерева, если оно избегает b-ac.
Известно, что существует столько же деревьев размера n, сколько перестановок, избегающих b-ac так что это биекция. Их число известно как каталонское число. Вы, вероятно, можете найти это упражнение в книге Стэнли "перечислительная комбинаторика".
Вот более алгоритмическое объяснение :
RecTree: Recovering a tree from is Pre-order traversal: input: list l output: tree t b <- l[0] find an index i such that - for 1<=j<=i then l[j] < b and - for i<j<=n then l[j] > b if there isn't exists such an index return Failure else return Node(key=b, RecTree(l[1..i]), RecTree(l[i+1..n]))
Как следствие
Два бинарных дерева поиска равны тогда и только тогда, когда они имеют одинаковый предварительный порядок обхода
Есть ли в этом смысл для вас ?
Еще несколько ссылок