Интересный вопрос!Я считаю, что ответ N факториален!
Учитывая древовидную структуру, есть только один способ заполнить значения ключа бинарного дерева поиска.
Таким образом, все, что нам нужно сделать, это подсчитать разныеколичество куч.
Учитывая кучу, рассмотрим обход дерева по порядку.
Это соответствует перестановке чисел от 1 до N.
Теперь данолюбая перестановка {1,2 ..., N}, вы можете построить кучу следующим образом:
Найти положение самого большого элемента.Элементы слева образуют левое поддерево, а элементы справа образуют правое поддерево.Эти поддеревья формируются рекурсивно путем нахождения самого большого элемента и расщепления там.
Это приводит к образованию кучи, так как мы всегда выбираем элемент max, и обход этой кучи по порядку - это перестановка, с которой мы начали.Таким образом, у нас есть способ перехода от кучи к перестановке и обратно уникальным образом.
Таким образом, требуемое число - N!.
Например:
5
/ \
3 4 In-order traversal -> 35142
/ \
1 2
Теперь начните с 35142. Самое большое - 5, поэтому 3 - это левое поддерево, а 142 -right.
5
/ \
3 {142}
В 142 4 является наибольшим, а 1 - левым, а 2 - правым, поэтому мы получаем
5
/ \
3 4
/ \
1 2
Единственный способ заполнить двоичные ключи поиска для этого:
(2,5)
/ \
(1,3) (4,4)
/ \
(3,1) (5,2)
Для более формального доказательства:
Если H N - это количество куч на 1 ... N, то имеем
H N = сумма_ {L = от 0 до N-1} H L * H N-1-L * (N-1 выберите L)
(в основном мы выбираем максимальное значение и назначаем root. Выберите размер левого поддерева, а затем выберите столько элементов и рекурсив слева и справа).
Теперь,
H0 = 1
H1 = 1
H2 = 2
H3 = 6
Если H n = n!для 0 ≤ n ≤ k
Тогда H K + 1 = Sum_{L=0 to K} L! * (K-L)! * (K!/L!*(K-L)!) = (K+1)!