Întrebarea dvs. este echivalentă cu problema de numărare a numărului de ordonări topologice pentru BST dat.
De exemplu, pentru BST
10
/ \
5 20
\7 | \
15 30
setul de ordonări topologice pot fi numărate manual, astfel: 10 începe în fiecare ordonare. Numărul orderings topologice pentru subarborele începând cu 20 este de două: (20, 15, 30) și (20, 30, 15). Subarborele începând cu 5 are doar o singură ordonare: (5, 7). Aceste două secvențe pot fi intercalate într-un mod arbitrar, conducând la 2 x 10 interleavings, producând astfel douăzeci intrări care produc aceeași BST. Primele 10 sunt enumerate mai jos pentru cazul (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
Cazul (20, 30, 15) este analog --- puteți verifica dacă oricare dintre următoarele intrări produce aceeași BST.
Acest exemplu prevede, de asemenea, o regulă recursiv pentru a calcula numărul de ordonările. Pentru o frunză, numărul este 1. Pentru un nod fără frunze cu un copil, numărul este egal cu numărul de ordonări topologice pentru copil. Pentru un nod non-frunze, cu doi copii cu dimensiuni de subramificație | L | și | R |., ambele având l și r ordonări, respectiv, numărul este egal cu
l x r x INT(|L|, |R|)
În cazul în care INT este numărul de posibile interleavings ale | L | și | R | elemente. Acest lucru poate fi calculată cu ușurință prin (| L | + | R |)! / (| L |! X | R |!). Pentru exemplul de mai sus, vom obține următorul calcul recursiv:
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
Aceasta rezolvă problema.
Notă: această soluție presupune că toate nodurile din BST au chei diferite.