Ваш вопрос эквивалентен вопрос о подсчете числа топологических порядков для данного 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) аналогично --- вы можете проверить, что в один из следующих входов производят то же самое ЛУЧШЕЕ.
Этот пример также обеспечивает рекурсивное правило для вычисления количества упорядочений. Для листа, номер 1. Для узла не листа с одного ребенка, число которых равно числу топологических порядками для ребенка. Для узла не листа с двумя детьми с размерами поддерева | L | и | Р |., обе имеющие л и г упорядоченности, соответственно, число равно
l x r x INT(|L|, |R|)
Где INT этого числа возможных чередований | L | и | R | элементы. Это можно легко вычислить по формуле (| L | + | R |)! / (| L |! Х | 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 имеют разные ключи.