Ваш вопрос эквивалентен вопросу подсчета количества топологических упорядочений для данного BST.
Например, для BST
10
/ \
5 20
\7 | \
15 30
набор топологических упорядочений можно посчитать вручную следующим образом: 10 начинается при каждом упорядочении. Число топологических упорядочений для поддерева, начинающегося с 20, равно двум: (20, 15, 30) и (20, 30, 15). Поддерево, начинающееся с 5, имеет только один порядок: (5, 7). Эти две последовательности могут чередоваться произвольным образом, что приводит к 2 × 10 чередованиям, в результате чего получается двадцать входов, которые вырабатывают один и тот же BST. Первые 10 перечислены ниже для случая (20, 15, 30):
10 5 7 20 15 30
10 5 20 7 15 30
10 5 20 15 7 30
10 5 20 15 30 7
10 20 5 7 15 30
10 20 5 15 7 30
10 20 5 15 30 7
10 20 15 5 7 30
10 20 15 5 30 7
10 20 15 30 5 7
Случай (20, 30, 15) аналогичен - вы можете проверить, что любой из следующих входов выдает одинаковый BST.
Этот пример также предоставляет рекурсивное правило для расчета количества заказов. Для листа число равно 1. Для неконечного узла с одним потомком число равно количеству топологических упорядочений для потомка. Для неконечного узла с двумя дочерними элементами с размерами поддерева | L | и | R |, оба имеют порядки l и r, соответственно, число равно
l x r x INT(|L|, |R|)
Где INT - число возможных перемежений | L | и | R | элементы. Это можно легко вычислить как (| L | + | R |)! / (| L |! X | R |!). Для приведенного выше примера мы получаем следующие рекурсивные вычисления:
Ord(15) = 1
Ord(30) = 1
Ord(20) = 1 x 1 x INT(1, 1) = 2 ; INT(1, 1) = 2! / 1 = 2
Ord(7) = 1
Ord(5) = 1
Ord(10) = 1 x 2 x INT(2, 3) = 2 x 5! / (2! x 3!) = 2 x 120 / 12 = 2 x 10 = 20
Это решает проблему.
Примечание: это решение предполагает, что все узлы в BST имеют разные ключи.