Su pregunta es equivalente a la cuestión de contar el número de ordenamientos topológicos para la BST dada.
Por ejemplo, para la BST
10
/\
5 20
\7 | \
15 30
el conjunto de ordenaciones topológicos se puede contar con la mano de esta manera: 10 aperturas cada pedido. El número de ordenamientos topológicos para el subárbol que comienza con 20 es dos: (20, 15, 30) y (20, 30, 15). El subárbol que comienza con 5 tiene solo un orden: (5, 7). Estas dos secuencias se pueden intercalar de manera arbitraria, lo que lleva a intercalaciones de 2 x 10, produciendo así veinte entradas que producen la misma BST. El primero 10 se enumeran a continuación para el caso (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
El caso (20, 30, 15) es análoga --- se puede comprobar que cualquiera de las siguientes entradas produce la mismo BST.
Este ejemplo también proporciona una regla recursiva para calcular el número de ordenamientos. Para una hoja, el número es 1. Para un nodo no hoja con un hijo, el número es igual al número de ordenamientos topológicos para el niño. Para un nodo no hoja con dos hijos con tamaños de subárbol | L | y | R |., ambos con L y R ordenamientos, resp, el número es igual a
l x r x INT(|L|, |R|)
Dónde INT es el número de posibles intercalaciones de | L | y | R | elementos. Esto se puede calcular fácilmente por (| L | + | R |)!/(| L |! X | R |!). Para el ejemplo anterior, obtenemos el siguiente cálculo recursivo:
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
Esto soluciona el problema.
Nota: esta solución asume que todos los nodos en el BST tienen claves diferentes.
¿Por qué es necesario el nondeterminismo? – anukul
No es, realmente. Estuve pensando mucho sobre el no determinismo en 2009. Sin embargo, encaja perfectamente con este problema: probar una cosa, mostrar el resultado y luego retroceder a un estado anterior (donde está el estado (conjunto de nodos visitados, ruta hasta ahora)). – Greg