Entiendo la estructura de los árboles binarios y cómo atravesarlos. Sin embargo, estoy luchando por darme cuenta de sus usos reales, propósitos en programas y programación. Cuando pienso en ejemplos de "vida real" de datos jerárquicos, casi con toda seguridad tienen más de 2 hijos. Por ejemplo, en un árbol genealógico, una madre a menudo puede tener más de dos hijos.
¿Son realmente útiles los 'árboles binarios' para almacenar datos relacionados linealmente debido a los tiempos de procesamiento más rápidos en las matrices y listas? Alternativamente, ¿tienen un propósito específico en el almacenamiento de datos jerárquicos? Si es así, ¿qué ejemplos hay de la aplicación de árboles binarios? ¿Qué datos son tales que un nodo tiene como máximo 2 hijos?
fuente
Respuestas:
No, los árboles binarios no son para almacenar datos jerárquicos en el sentido en que está pensando. El caso de uso principal para los árboles n-arios, donde
n
es un número fijo, es la capacidad de búsqueda rápida , no una jerarquía semántica.Recuerde el viejo juego en el que una persona piensa en un número entre 1 y 100, y la otra tiene que adivinarlo con la menor cantidad de conjeturas posible, y si adivina mal, la persona que piensa en el número tiene que decirle si usted también alto o muy bajo? Se vuelve aburrido después de un tiempo porque rápidamente descubres que siempre debes comenzar en 50, luego ir a 25 o 75, y seguir dividiendo el rango a buscar por la mitad con cada nueva suposición después de eso, y eventualmente puedes adivinar cualquier número en un máximo de 7 conjeturas, garantizado.
Puede que no sea un juego divertido, pero esa propiedad es lo que hace que los árboles binarios (y otros n-arios) sean útiles: puede usarlos para buscar un conjunto de datos muy grande en muy poco tiempo.
fuente
Cualquier estructura de árbol, donde un nodo puede tener un número ilimitado de hijos, se puede implementar utilizando un árbol binario.
Para cada nodo en su árbol, reemplácelo con un nodo con un puntero derecho e izquierdo. El puntero izquierdo va al primero de los hijos del nodo. El nodo derecho va al siguiente hermano del nodo. Todos los elementos secundarios de un nodo dado están en una lista vinculada unida por sus punteros derechos, con el encabezado de la lista señalado por el puntero izquierdo de su elemento primario.
Su complicado árbol n-ario se ha convertido en un árbol simple y binario.
Estoy seguro de que esto está en Knuth, vol. 1 en alguna parte.
fuente
Árboles binarios, ¿por qué usarlos?
En programación trabajas mucho con colecciones de datos del mismo tipo.
Las dos formas básicas de almacenar estos datos son: listas y matrices vinculadas.
Ambos vienen con ventajas y desventajas: en una lista vinculada es fácil agregar elementos en cualquier posición o eliminar elementos. Pero el acceso a un elemento específico es más difícil, ya que debe revisar la lista hasta que esté en el elemento que desea.
Con una matriz, el acceso a un elemento específico es fácil, pero es más difícil insertar o eliminar un elemento porque insertar significa: extender la matriz en uno, desplazar todos los elementos antes de la posición de inserción 1 a la derecha e insertar el elemento.
Entonces, tanto la lista vinculada como la matriz tienen desventajas.
Los árboles binarios están hechos para abordar los problemas de la matriz y la lista vinculada:
Entonces, el árbol binario está hecho para cuando tienes muchos datos que cambian regularmente.
fuente