Twoje pytanie jest równoważne kwestii liczenia liczby porządków topologicznych dla danego BST.
Na przykład, dla BST
10
/ \
5 20
\7 | \
15 30
zestaw porządków topologicznych można policzyć ręcznie tak: 10 rozpoczyna każdy zamówieniu. Liczba topologii uporządkowania dla poddrzewem wychodząc z 20 wynosi dwa (20, 15, 30) oraz (20, 30, 15). Poddrzewo wychodząc z 5 ma tylko jeden zamawiania: (5, 7). Te dwie sekwencje mogą być przeplatane w dowolny sposób, co prowadzi do 2 x 10 interleavings, wytwarzając dwadzieścia wejściowe, które wytwarzają taki sam BST. Pierwszy 10 są wymienione poniżej obudowy (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
Przypadek (20, 30, 15) jest analogiczna --- można sprawdzić, że każdy z następujących wejść produkuje taką samą BST.
Przykład ten dostarcza również regułę rekurencyjną aby obliczyć liczbę porządków. Na liściu, liczba wynosi 1. Dla węzeł non-liść z jednym dzieckiem, liczba jest równa liczbie topologicznych porządków dla dziecka. Dla węzła bez liści z dwójką dzieci o rozmiarach SUBTREE | L | i | r |., oba posiadające uporządkowania L i R, odpowiednio, liczba jest równa
l x r x INT(|L|, |R|)
Gdzie INT jest liczba możliwych interleavings grupy | L | a | R | elementy. To można obliczyć w prosty sposób (| L | + | r |)! / (| L |! X | R |!). Dla powyższego przykładu, otrzymujemy następujące rekurencyjnego obliczenia:
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
To rozwiązuje problem.
Uwaga: to rozwiązanie zakłada, że wszystkie węzły w BST mają różne klucze.