Como con la mayoría de los problemas relacionados con los árboles, podemos pensar en la solución de forma recursiva. Si tiene uno de los nodos [math] n [/ math] como raíz, entonces hay dos hijos, que son raíces de árboles binarios. El tamaño de estos subárboles se puede denotar por [math] b_1 [/ math] y [math] b_2 [/ math], bajo la restricción de que [math] b_1 + b_2 = n-1 [/ math].
Por lo tanto, es posible que [matemática] b_1 = 0 [/ matemática] y [matemática] b_2 = n-1 [/ matemática], [matemática] b_1 = 3 [/ matemática] y [matemática] b_2 = n-4 [/ matemática ], y toda una serie de posibilidades.
Desde aquí podemos hacer una relación de recurrencia:
- ¿Vale la pena tomar el curso en línea de comercio algorítmico en Quantinsti?
- ¿Existe un límite superior para la capacidad de comprensión de un individuo? Si es así, ¿qué se debe hacer para mejorarlo?
- ¿Cómo resolver el problema de los genéricos?
- Cómo elegir métricas de error para el algoritmo de aprendizaje automático
- En el algoritmo KNN, ¿por qué el pequeño valor de k conduce a una pequeña tasa de error?
[matemáticas] f (n) = \ displaystyle \ sum_ {k = 0} ^ {n-1} {f (k) \ cdot f ((n-1) -k)} [/ math]
Con el caso base que [math] f (0) = 1 [/ math], ya que solo hay un árbol binario vacío.
Esta recurrencia está dada en forma cerrada por el número catalán, es decir, [math] f (n) = \ dfrac {(2n)!} {(N + 1)! (N)!} [/ Math].
Nota: si está intentando escribir un programa para decirle la respuesta, una forma fácil de calcular el número catalán que evita el desbordamiento y se adhiere a los enteros sería calcular [math] \ binom {2n} {n} [/ math] y luego dividir entre [matemáticas] n + 1 [/ matemáticas]. Puede encontrar buenas implementaciones de combinaciones en el desbordamiento de pila. Dicho esto, este número crece ridículamente rápido, por lo que un enfoque de programación dinámica que use la relación de recurrencia anterior sería lo suficientemente rápido para cualquier cosa de tamaño razonable (es decir, cualquier cosa que se ajuste a los enteros estándar).