Arboles
Last updated
Last updated
En informΓ‘tica, un Γ‘rbol es una estructura de datos jerΓ‘rquica compuesta por nodos interconectados, donde cada nodo tiene un nodo padre (excepto la raΓz) y cero o mΓ‘s nodos hijos. EstΓ‘ diseΓ±ado para organizar datos eficientemente, facilitando la bΓΊsqueda y manipulaciΓ³n de informaciΓ³n. Los Γ‘rboles son fundamentales en la representaciΓ³n y estructuraciΓ³n de datos en algoritmos y aplicaciones informΓ‘ticas.
AquΓ, exploraremos los conceptos bΓ‘sicos de los Γ‘rboles, sus elementos fundamentales y cΓ³mo se estructuran en la programaciΓ³n:
El predecesor de cualquier elemento se denomina padre del elemento
El nodo que no tiene padre y predecesor de todos los elementos de denomina raiz
Cada nodo puede tener 0 o mas hijos
Todo hijo es un subarbol
Los nodos sin hijos se denominan hojas
Anchura (fan-out): Maximo numero de hijos para un nodo cualquiera de un arbol
Arbol-general: tiene un fan-out acotado
Arboles binarios: Tiene un fan-out maximo de 2, es decir puede tener como maximo 2 hijos por cada nodo
Altura: Distancia maxima desde la raiz a cualquiera de las hojas
Nivel: Conjunto de nodos de un arbol que tienen la misma altura
El recorrido en anchura, tambiΓ©n conocido como BFS, explora el Γ‘rbol nivel por nivel. Comienza visitando la raΓz y luego se mueve a sus nodos hijos antes de avanzar al siguiente nivel. Para implementarlo, utilizamos una cola para mantener un seguimiento del orden de visita. Este recorrido es eficaz para encontrar el camino mΓ‘s corto en un grafo no ponderado y garantiza que los nodos se visiten en el orden en que aparecen en cada nivel.
En el recorrido en profundidad preorden, primero se visita el nodo actual, luego se realiza el mismo proceso en el subΓ‘rbol izquierdo y, finalmente, en el subΓ‘rbol derecho. Es ΓΊtil para explorar la estructura del Γ‘rbol antes de profundizar en niveles inferiores. Puede ser utilizado para crear una copia del Γ‘rbol, imprimir una expresiΓ³n aritmΓ©tica en notaciΓ³n prefija o realizar cualquier acciΓ³n que necesite procesar el nodo antes de sus hijos.
En el recorrido en profundidad postorden comineza por las hojas, primero se visitan los nodos de los subΓ‘rboles izquierdo y derecho y, finalmente, el nodo raiz. Este enfoque es ΓΊtil para liberar la memoria ocupada por el Γ‘rbol, ya que libera los nodos de abajo hacia arriba. TambiΓ©n se utiliza para realizar operaciones que deben ocurrir despuΓ©s de procesar los nodos hijos, como evaluar expresiones aritmΓ©ticas.
El recorrido inorden es un tipo de travesΓa en Γ‘rboles que sigue el patrΓ³n de visitar primero el subΓ‘rbol izquierdo, luego el nodo padre y, finalmente, el subΓ‘rbol derecho. Es especialmente ΓΊtil en Γ‘rboles binarios de bΓΊsqueda, ya que este orden de recorrido produce una secuencia ordenada de los valores almacenados.
En esencia, un Γ‘rbol de bΓΊsqueda binario es una estructura jerΓ‘rquica que consta de nodos, cada uno con, como mΓ‘ximo, dos hijos: uno izquierdo y otro derecho. La clave de su eficacia radica en la organizaciΓ³n de los datos:
Los nodos izquierdos tiene un valor inferior que el nodo antedecesor
Los nodos derechos tiene un valor mayor que el nodo antedecesor
La operaciΓ³n de bΓΊsqueda en Γ‘rboles de bΓΊsqueda binarios es una de las funcionalidades clave que hacen que esta estructura de datos sea tan eficiente. El proceso de bΓΊsqueda se inicia desde la raΓz del Γ‘rbol y avanza hacia abajo, comparando la clave de bΓΊsqueda con la clave del nodo actual.
Inicio desde la RaΓz:
La bΓΊsqueda comienza en el nodo raΓz del Γ‘rbol. Se compara la clave de bΓΊsqueda con la clave del nodo actual.
Descenso por el Γrbol:
Si la clave de bΓΊsqueda es menor que la clave del nodo actual, la bΓΊsqueda se dirige hacia el subΓ‘rbol izquierdo. Si es mayor, se dirige hacia el subΓ‘rbol derecho. Este proceso de comparaciΓ³n y descenso continΓΊa hasta que se encuentra el nodo deseado o se llega a una hoja del Γ‘rbol, indicando que el elemento no estΓ‘ presente.
La operaciΓ³n de inserciΓ³n en Γ‘rboles de bΓΊsqueda binarios es esencial para construir y mantener la estructura del Γ‘rbol de manera ordenada. AquΓ tienes un pseudocΓ³digo bΓ‘sico para la inserciΓ³n en un Γ‘rbol de bΓΊsqueda binario:
Caso Base:
Si la raΓz es nula, significa que el Γ‘rbol estΓ‘ vacΓo, por lo que el nuevo nodo se convierte en la raΓz.
ComparaciΓ³n de Claves:
Se compara la clave del nuevo nodo con la clave del nodo actual. Dependiendo de la comparaciΓ³n, se decide si se inserta en el subΓ‘rbol izquierdo o derecho.
Recursividad:
Si el subΓ‘rbol correspondiente estΓ‘ vacΓo, se inserta el nuevo nodo en esa posiciΓ³n. Si no estΓ‘ vacΓo, se realiza la inserciΓ³n de manera recursiva en el subΓ‘rbol correspondiente.
La operaciΓ³n de eliminaciΓ³n en Γ‘rboles de bΓΊsqueda binarios es un proceso mΓ‘s complejo que busca mantener la propiedad de orden del Γ‘rbol mientras se elimina un nodo especΓfico. AquΓ tienes un pseudocΓ³digo bΓ‘sico para la eliminaciΓ³n en un Γ‘rbol de bΓΊsqueda binario:
Casos Base:
Si la raΓz es nula, significa que el elemento no estΓ‘ presente en el Γ‘rbol, por lo que no hay nada que eliminar.
Recursividad:
Se realiza la bΓΊsqueda del nodo a eliminar en el subΓ‘rbol izquierdo o derecho segΓΊn la comparaciΓ³n de claves.
Caso 1: Nodo con un solo hijo o sin hijos:
Si el nodo a eliminar tiene uno o ningΓΊn hijo, simplemente se reemplaza por su hijo (si existe) o se elimina directamente.
Caso 2: Nodo con dos hijos:
Si el nodo a eliminar tiene dos hijos, se encuentra el sucesor in-order (el nodo mΓ‘s pequeΓ±o en el subΓ‘rbol derecho), se copia su clave en el nodo actual y luego se procede a eliminar el sucesor.
Es posible hacer lo mismo con el nodo mas grande en el subarbol izquierdo
Este pseudocΓ³digo asume funciones auxiliares como Eliminar
para eliminar un nodo y EncontrarSucesorInOrder
para encontrar el sucesor in-order en el subΓ‘rbol derecho. AsegΓΊrate de ajustar el pseudocΓ³digo segΓΊn la implementaciΓ³n especΓfica de tu Γ‘rbol binario. La eliminaciΓ³n en Γ‘rboles de bΓΊsqueda binarios garantiza que el Γ‘rbol siga siendo un BST despuΓ©s de la operaciΓ³n.