Votre question est équivalente à la question de compter le nombre de ordonnancements topologiques pour la BST donnée.
Par exemple, pour la BST
10
/ \
5 20
\7 | \
15 30
l'ensemble des ordonnancements topologiques peut être compté à la main comme ceci: 10 commence chaque commande. Le nombre d'ordres topologiques pour le sous-arbre en commençant par 20 est égal à deux: (20, 15, 30) et (20, 30, 15). Le sous-arbre à partir de 5 a une seule commande: (5, 7). Ces deux séquences peuvent être entrelacées de manière arbitraire, ce qui conduit à 2 x 10 entrelacements, produisant ainsi vingt entrées qui produisent le même BST. Le premier 10 sont énumérés ci-dessous pour le cas (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
Le boîtier (20, 30, 15) est analogue --- on peut vérifier que l'une des entrées suivantes de la même produit BST.
Cet exemple fournit également une règle récursive pour calculer le nombre des ordonnancements. Pour une feuille, le nombre est 1. Pour un nœud non-feuille avec un enfant, le nombre est égal au nombre de ordonnancements topologiques pour l'enfant. Pour un nœud non-feuille avec deux enfants avec des tailles de sous-arbre | L | et | R |., les deux ayant l et r ordonnancements, resp, le nombre est égal à
l x r x INT(|L|, |R|)
Où INT est le nombre de entrelacements possibles | L | et | R | éléments. Cela peut être calculé facilement par (| L | + | R |)! / (| L |! X | R |!). Pour l'exemple ci-dessus, on obtient le calcul récursif suivant:
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
Cela résout le problème.
Remarque: cette solution suppose que tous les nœuds du BST clés ont différentes.