Un árbol binario completamente equilibrado tiene 187 hojas. ¿Cuál es la altura del árbol?

La respuesta correcta es que la profundidad de dicho árbol puede ser 8, 9 o 10 .

No, no son solo 8.

Es un error común pensar que la profundidad de un árbol equilibrado en los nodos [matemática] n [/ matemática] debe ser algo así como [matemática] \ lceil \ log_2 n \ rceil [/ matemática], tal vez más o menos uno.

La definición comúnmente utilizada de un árbol equilibrado es la siguiente:

  • un nodo está equilibrado si las profundidades de su subárbol izquierdo y su subárbol derecho difieren en como máximo 1.
  • un árbol está equilibrado si cada uno de sus nodos está equilibrado

(Esta es también la definición original utilizada en los árboles AVL).

Dada esta definición, es cierto que la profundidad de cualquier árbol equilibrado en los nodos [matemática] n [/ matemática] debe ser [matemática] O (\ log n) [/ matemática], pero esa es una afirmación estrictamente más débil que decir que la profundidad es [math] \ log_2 n [/ math]. De hecho, esto último no es cierto. La mayor profundidad posible de un árbol equilibrado en los nodos [matemática] n [/ matemática] es en realidad aproximadamente [matemática] \ log _ {\ Phi} n [/ matemática], donde [matemática] \ Phi [/ matemática] es la proporción áurea . Eso es aproximadamente 1,44 veces peor que el simple [math] \ log_2 n [/ math].

Por ejemplo, el árbol “mejor” equilibrado en los nodos [matemática] 2 ^ {30} -1 [/ matemática] tiene obviamente una profundidad de 30, pero hay otros árboles equilibrados con el mismo número de nodos y una profundidad diferente. El árbol más profundo en los nodos [matemática] 2 ^ {30} -1 [/ matemática] que aún está equilibrado tiene una profundidad 42.

Incluso si requerimos que el árbol esté lleno (es decir, cada nodo interno debe tener dos hijos), el cambio en el rango de profundidades posibles es insignificante.

A continuación se muestra una figura que muestra el árbol binario equilibrado completo más pequeño con profundidad 10 . Este árbol tiene solo 144 hojas (y, por lo tanto, 143 nodos internos). Este árbol obviamente puede extenderse a un árbol binario completo que todavía está equilibrado y tiene 187 hojas, mientras que todavía tiene la misma profundidad.

La figura de arriba es ancha y casi desaparece después de que Quora la encoge 🙁 haga clic en ella para ampliarla.

Por definición, un árbol binario completamente equilibrado es un árbol binario en el que cada nodo que no sea el nodo raíz tiene dos hijos.

Puede encontrar la diferencia entre varios árboles aquí:

De acuerdo con esto, la condición mínima básica es que cada nivel debe tener un número par de nodos (excepto la raíz). 187 ser impar no tiene posibilidades de ser un árbol binario completamente equilibrado.

Ok, digamos, tenemos otro número de hijos, 256 y necesitamos encontrar el no de niveles.

Deje ‘n’ ser el número de niveles. El nivel justo encima de las hojas (n-1) tendría 128 nodos ya que cada nodo produce dos hijos. Del mismo modo, el nivel (n-2) tendría 64 nodos, etc. Entonces, básicamente estamos dividiendo el número por 2 cada vez.

Esto se puede obtener tomando el logaritmo de 2 directamente.
Entonces, para cualquier número par dado, si lo dividimos por log a la base 2 y le proporciona un número perfecto, sería el número de niveles (considerando, raíz en el nivel 0) de lo contrario, sería (número perfecto -1 )

Esperanza, eso responde

Un árbol perfecto de altura 7 tendría 128 hojas. La altura 8 tendría 256. Entonces, el árbol binario completamente equilibrado con 187 hojas debería tener una altura 8, sin tener el último nivel lleno.

More Interesting

¿Por qué el algoritmo ikj es más rápido que el algoritmo ijk para la multiplicación de matrices?

¿Qué significa que el algoritmo TD (en el aprendizaje por refuerzo) hace predicción y no control?

Cómo resolver esta relación de recurrencia: (bn + 1) = 6 * ((bn)) ^ 7, b (0) = 36

Cómo usar un algoritmo para resolver problemas de la vida real

¿Es mejor aprender primero los algoritmos y luego buscar problemas o simplemente elegir un problema aleatorio y luchar?

¿Qué se entiende por recursión?

En Python, dada la siguiente permutación de a, b, c, d, e, f, g, h, i, j, ¿cuál es la próxima permutación en el orden lexicográfico (diccionario)?

¿Por qué es difícil realizar una búsqueda binaria en una lista vinculada?

¿Es más difícil probar la corrección de algoritmos codiciosos que probar la corrección de cualquier otra clase de algoritmos?

¿Cómo reduce () tomar la entrada de múltiples map ()?

¿Es posible cuantificar la experiencia laboral?

Dada una matriz que contiene enteros distintos, ¿cuál es el número promedio de veces que se establece el valor máximo del elemento al encontrarlo?

Plegamiento de proteínas: ¿Qué algoritmos se usan en el juego Foldit?

Preguntado por un no experto en tecnología, ¿qué tan impactante sería si una tecnología pudiera mitigar el ruido impulsivo en tiempo real usando un algoritmo no lineal simple que usa la mediana (en lugar de la media)? Por ejemplo, podría usarse para reemplazar filtros lineales analógicos en teléfonos móviles, esencialmente actuando como un filtro lineal a menos que detecte ruido impulsivo y actúe para condicionarlo.

¿Cómo resuelvo los problemas de codechef y topcoder?