¿Cuál es la diferencia entre árboles binarios completos y completos?

En un árbol binario completo, todos los nodos tienen 0 o 2 hijos. Ambos tipos de nodos pueden aparecer en todos los niveles del árbol. Un ejemplo se da en la siguiente figura.

En un árbol binario completo, todos los nodos tienen dos hijos, excepto los nodos en los dos niveles más bajos. En el nivel más bajo, los nodos tienen (por definición) cero hijos, y en el nivel superior, los nodos pueden tener 0, 1 o 2 hijos. Además, el último nivel debe llenarse de izquierda a derecha sin dejar huecos. Un ejemplo se da en la siguiente figura.

Al comparar los dos tipos de árboles binarios, podemos hacer las siguientes observaciones:

  • No todo árbol binario completo es un árbol binario completo. Esto se ilustra en el primer ejemplo. Las dos razones para esto es que en un árbol binario completo las hojas pueden aparecer en cualquier nivel, no solo en los dos más bajos, y el nivel más bajo no necesita llenarse de izquierda a derecha sin dejar huecos.
  • No todo árbol binario completo es un árbol binario completo. Esto se ilustra en el segundo ejemplo. La razón es que hay un nodo con un solo hijo. Sin embargo, en un árbol binario completo siempre habrá como máximo un nodo que viole el requisito de árboles binarios completos. En ese sentido, los árboles binarios completos son árboles binarios completos o casi completos.
  • Cuando se usan árboles binarios como árboles de búsqueda, se vuelve importante si están equilibrados o no, ya que la profundidad de un nodo determina cuántos pasos se necesitan para encontrar el valor asociado. Desde esa perspectiva, el árbol binario completo es preferible, ya que es más equilibrado. Sin embargo, para conjuntos de valores que cambian mucho puede ser engorroso ya que puede requerir una gran reestructuración cuando se eliminan o agregan valores. Por lo tanto, muchas estructuras de datos populares para buscar en conjuntos dinámicos de valores, como los árboles rojo-negros, son de hecho árboles binarios completos con restricciones adicionales para garantizar alguna forma de equilibrio.

En un árbol binario completo, ningún nodo tiene un solo hijo.

Un árbol binario perfecto es un árbol binario completo con todas las hojas a la misma profundidad.

Un árbol binario completo es como un árbol binario perfecto, pero con las tantas hojas más a la derecha eliminadas.

La característica atractiva de un árbol binario completo es que se puede representar en una matriz de manera muy eficiente. La estructura de datos del montón binario utiliza un árbol binario completo almacenado en una matriz.

Árboles binarios completos vs completos

More Interesting

¿Cuál es el problema de algoritmo más difícil en LeetCode?

¿Puede enumerar algunos de los libros más importantes / definitivos sobre informática, algoritmos, diseño de software, estructuras de datos, redes?

Cómo encontrar la solución más óptima para una pregunta en particular que se ha enviado en LeetCode

¿Cómo funciona el algoritmo de estimulación del presupuesto publicitario de Facebook?

Cómo explicar el algoritmo de clasificación de inserción a un niño de 10 años

¿Por qué las personas usan mid = low + (high-low) / 2 en lugar de (low + high) / 2?

¿Qué debe saber todo programador sobre Lisp?

¿Cuál es el punto de usar programación dinámica cuando la complejidad de tiempo en la mayoría de los códigos es O (n ^ 2) (que no es tan bueno, es decir, usamos dobles para bucles incluso en DP)?

¿Cómo son útiles la estructura de datos y los algoritmos en el aprendizaje automático?

¿Puede un gráfico ser un circuito de Euler y una ruta al mismo tiempo?

¿Obtendría algún beneficio resolviendo los problemas del Proyecto Euler por la fuerza bruta?

¿Cómo funciona el algoritmo iPod shuffle?

¿Cuáles son algunas características de los datos de imágenes faciales que se pueden utilizar para alimentar los algoritmos de aprendizaje automático?

¿Qué patrones iterativos y recursivos se pueden expresar como O (1), O (log2n), O (n) u O (n2) en notación O grande?

En problemas de DP, ¿cómo sabe si usar una matriz / tabla 1D o una matriz / tabla 2D?