0% encontró este documento útil (0 votos)
49 vistas34 páginas

Examen Semestral

El documento presenta un trabajo semestral sobre árboles como estructuras de datos en informática, destacando su importancia en la organización y acceso a información jerárquica. Se exploran diferentes tipos de árboles, incluyendo árboles binarios, árboles de búsqueda binaria (BST), árboles AVL, árboles N-arios, árboles Trie, árboles Heap y árboles B, junto con sus características y aplicaciones. Además, se abordan elementos básicos para entender la definición de árboles, como nodos, raíz y subárboles.

Cargado por

oberth chiripua
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
49 vistas34 páginas

Examen Semestral

El documento presenta un trabajo semestral sobre árboles como estructuras de datos en informática, destacando su importancia en la organización y acceso a información jerárquica. Se exploran diferentes tipos de árboles, incluyendo árboles binarios, árboles de búsqueda binaria (BST), árboles AVL, árboles N-arios, árboles Trie, árboles Heap y árboles B, junto con sus características y aplicaciones. Además, se abordan elementos básicos para entender la definición de árboles, como nodos, raíz y subárboles.

Cargado por

oberth chiripua
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD DE PANAMÁ

CENTRO UNIVERSITARIO DE PANAMÁ ESTE


FACULTAD DE INFORMÁTICA, ELECTRÓNICA Y
COMUNICACIÓN
LIC. EN INFORMÁTICA PARA LA GESTIÓN EDUCATIVA Y EMPRESARIAL

TRABAJO SEMESTRAL

ASIGNATURA:
PROGRAMACIÓN III

ESTUDIANTES:
JANELIS JIMENEZ 8-1017-200
YESIBEL MORAN 8-1027-1402
OBERTH PEÑA 11-700-1125
RODNY BACORIZO 5-713-1935
TEMA:
ÁRBOLES
Índice

 Introducion

 Arboles

 Tipos de arboles

 Arboles binarios

 Arboles búsqueda binaria (bst)

 Arboles Alv

 Arboles N-arios

 Arboles trie

 Arboles heap

 Arboles B

Elementos básicos para entender su definición:


Arboles Binarios
Introducion

Los árboles son una de las estructuras de datos más importantes y versátiles en informática, ya que nos
permiten organizar y acceder a la información de forma jerárquica y eficiente. Estas estructuras simulan
relaciones entre elementos mediante nodos conectados entre sí, facilitando procesos como la búsqueda,
inserción y eliminación en tiempo óptimo.
A lo largo de este trabajo, se explorarán los distintos tipos de árboles, comenzando por los árboles binarios y
sus aplicaciones más comunes, como los Árboles de Búsqueda Binaria (BST) y los Árboles AVL, que garantizan
un equilibrio en su altura para optimizar las operaciones. También se estudiarán estructuras más generales
como los árboles N-arios, que permiten mayor cantidad de hijos por nodo, y los árboles Trie, ideales para la
manipulación eficiente de cadenas.
Posteriormente, revisaremos los árboles Heap y su uso en algoritmos como la ordenación por montículo, junto
con los árboles B, fundamentales en sistemas de almacenamiento secundario gracias a su gran capacidad de
ramificación. Por último, comprenderemos los elementos básicos para entender su definición, poniendo
especial atención al concepto de árbol binario, que sienta las bases para comprender todas las demás
estructuras.
En conjunto, este recorrido por los diferentes tipos de árboles y sus propiedades nos ayudará a comprender
mejor su estructura, sus aplicaciones y su importancia dentro de la computación y el manejo eficiente de
datos.
Árboles

Un árbol es una estructura (posiblemente no lineal) de


datos compuesta de nodos, vértices y aristas que es acíclica.
Un árbol que no tiene ningún nodo se llama árbol vacío o
nulo. Un árbol que no está vacío consta de un nodo raíz y
potencialmente muchos niveles de nodos adicionales que
forman una jerarquía.
Los árboles son utilizados en diversas áreas, como la implementación de bases de datos, la
representación de estructuras de archivos, la optimización de algoritmos de búsqueda y
ordenación, entre otros. La comprensión de estos conceptos es fundamental para el desarrollo
eficiente de algoritmos y la gestión de datos en la programación.
Tipos de árboles
Árboles Binarios: Los árboles binarios son una estructura de datos
jerárquica en la que cada nodo tiene, como máximo, dos hijos: uno
izquierdo y uno derecho. La estructura de un árbol binario se
asemeja a una estructura de árbol real, con la raíz en la parte
superior y los nodos descendiendo hacia abajo.
Características Importantes de los Árboles Binarios:
●Estructura Jerárquica:
La estructura sigue una jerarquía en la que cada nodo tiene un nodo padre, excepto la raíz que
no tiene un nodo padre, y cada nodo puede tener cero, uno o dos hijos.
●Ordenación:
Los árboles binarios pueden ser de búsqueda o no de búsqueda. En un árbol binario de
búsqueda (BST), para cada nodo, todos los nodos en su subárbol izquierdo tienen valores
menores, y todos los nodos en su subárbol derecho tienen valores mayores.
●Recorridos:
Se pueden realizar recorridos en árboles binarios para visitar y procesar nodos en diferentes
secuencias: preorden, inorden y postorden.
●Altura: La altura de un árbol binario es la longitud del camino más largo desde la raíz hasta
una hoja. Un árbol binario equilibrado tiene una altura logarítmica en relación con el número
de nodos.
●Aplicaciones: Los árboles binarios se utilizan en diversas aplicaciones, como
la implementación de expresiones aritméticas, árboles de análisis sintáctico, estructuras de
búsqueda y organización de datos.

Árboles de Búsqueda Binaria (BST): Son una estructura de datos


que organiza sus nodos de manera jerárquica, siguiendo una regla
específica: para cada nodo, todos los valores en su subárbol
izquierdo son menores o iguales al valor del nodo, y todos los
valores en su subárbol derecho son mayores. Esta propiedad hace
que los BST sean eficientes para realizar búsquedas, inserciones y
eliminaciones.
●El nodo raíz es 8.
●En el subárbol izquierdo del nodo 8, todos los valores son menores que 8.
●En el subárbol derecho del nodo 8, todos los valores son mayores que 8.
Características Clave de Árboles de Búsqueda Binaria:
●Orden de los Nodos:
En un BST, el orden de los nodos sigue la regla mencionada anteriormente. Cada nodo tiene, a
lo sumo, dos hijos: uno a la izquierda y otro a la derecha.
●Eficiencia en Búsquedas:
La propiedad de ordenamiento de los BST permite realizar búsquedas eficientes. Al comparar
el valor buscado con el valor en el nodo actual, se puede determinar en qué subárbol
continuar la búsqueda.
●Eficiencia en Inserciones y Eliminaciones:
Insertar y eliminar elementos en un BST también es eficiente, ya que se pueden realizar
comparaciones para determinar la ubicación correcta del nuevo elemento o el elemento a
eliminar.
●Inorden (In Order) es Ordenado: Realizar un recorrido inorden en un BST resulta en una
secuencia ordenada de los elementos. Este recorrido visita primero el subárbol izquierdo,
luego el nodo actual y finalmente el subárbol derecho.
Árboles AVL: Los Árboles AVL son un tipo específico de árboles de búsqueda binaria (BST)
diseñados para garantizar tiempos de búsqueda eficientes al mantener un equilibrio
automático en la estructura del árbol.
La característica principal que distingue a los Árboles AVL es que la altura de los subárboles
izquierdo y derecho de cualquier nodo difiere en no más de una unidad. Este equilibrio
asegura que el árbol tenga una altura logarítmica, lo que se traduce en operaciones de
búsqueda, inserción y eliminación con complejidad temporal logarítmica.
Características Clave de Árboles AVL:
●Equilibrio Automático:
Después de realizar operaciones de inserción o eliminación, el árbol AVL se reorganiza
automáticamente para mantener el equilibrio. Esto se logra mediante rotaciones, que son
operaciones específicas diseñadas para preservar el orden de búsqueda y garantizar que la
altura del árbol se mantenga bajo control.
●Altura Logarítmica:
Debido a su propiedad de equilibrio, la altura de un árbol AVL es logarítmica en relación con el
número de nodos presentes. Esta característica es esencial para garantizar la eficiencia de las
operaciones, ya que la altura logarítmica implica tiempos de búsqueda, inserción y eliminación
logarítmicos.
●Rotaciones:
Las rotaciones son operaciones fundamentales en Árboles AVL para mantener el
equilibrio. Pueden ser rotaciones simples (a la izquierda o a la derecha) o rotaciones dobles
(una combinación de rotaciones simples). Estas rotaciones se aplican según el desbalance
causado por la inserción o eliminación.
●Complejidad Temporal Eficiente:
Las operaciones de búsqueda, inserción y eliminación en un Árbol AVL tienen una complejidad
temporal logarítmica (O(log n)), donde «n» es el número de nodos en el árbol. Esto garantiza
un rendimiento eficiente incluso para conjuntos de datos grandes.
Árboles N-arios: Son una extensión de los árboles binarios, donde cada nodo puede tener más
de dos hijos. En un Árbol N-ario, el número de hijos que puede tener cada nodo no está
limitado a dos, como en los árboles binarios, sino que puede ser cualquier número N. Esto
brinda mayor flexibilidad en la representación de relaciones jerárquicas y estructuras de datos.
Características clave de los Árboles N-arios:
O Número Variable de Hijos:
Cada nodo puede tener un número variable de hijos, lo que significa que no hay restricciones
en la cantidad de ramas que pueden emanar de un nodo.
o Estructura Jerárquica:
Al igual que otros tipos de árboles, los Árboles N-arios mantienen una estructura
jerárquica. Cada nodo, excepto la raíz, tiene un nodo padre y puede tener varios nodos hijos.
o Representación Versátil:
La capacidad de tener más de dos hijos hace que sean ideales para modelar una amplia gama
de relaciones jerárquicas en diversas aplicaciones.
o Eficiencia en Almacenamiento:
En comparación con árboles binarios, los Árboles N-arios pueden ser más eficientes en
términos de almacenamiento cuando se trata de nodos con un número variable de hijos.
o Ejemplos de Aplicación:
●Estructuras de Directorios en Sistemas de Archivos.
●Árboles Genealógicos.
●Organización de Categorías en Taxonomías.
●Estructuras de Datos en Redes y Grafo
Árboles Trie: Los Árboles Trie (o simplemente «Tries») son
estructuras de datos especializadas utilizadas para almacenar
un conjunto de palabras o cadenas. Su nombre proviene de la
palabra «restriega» (recuperación en inglés), y su estructura
jerárquica facilita la búsqueda y recuperación eficiente de
palabras o fragmentos de palabras. Los Tries son comúnmente
utilizados en estructuras de datos para implementar
diccionarios y realizar operaciones de búsqueda de cadenas de
manera eficiente.
Características clave de los Árboles Trie:
o Estructura Jerárquica:
Un Trie es un árbol en el que cada nivel representa un carácter de la palabra. A medida que se
desciende por el árbol, los caminos desde la raíz hasta los nodos hoja forman palabras
completas.
o Nodo Raíz:
El nodo raíz del Trie no representa ningún carácter, pero tiene enlaces a nodos que
representan los posibles caracteres iniciales de las palabras almacenadas.
o Nodos Intermedios y Nodos Hoja:
Los nodos intermedios representan caracteres que forman parte de palabras, pero no son el
último carácter de una palabra completa. Los nodos hoja representan el final de una palabra.
o Eficiencia en Búsqueda:
La búsqueda en un Trie es eficiente, ya que cada nivel del árbol representa un carácter de la
palabra, y se puede realizar una búsqueda descendiendo por el árbol de acuerdo con los
caracteres de la palabra que se está buscando.
o Implementación Compacta:
Pueden ser implementados de manera compacta, especialmente
cuando hay múltiples palabras comparten prefijos comunes. Esto
ahorra espacio de almacenamiento.
o Uso en Autocompletado:
Debido a su estructura jerárquica y eficiencia en búsquedas, los Tries son comúnmente
utilizados en sistemas de autocompletado, donde se proporcionan sugerencias de palabras
mientras el usuario escribe.
Árboles Heap: Son una forma especial de árbol binario que satisface la propiedad de heap
(máximo o mínimo) en cada nodo. La propiedad de heap significa que el valor de cada nodo es
mayor (o menor) que los valores de sus nodos hijos. Dependiendo de si es un Max-heap o un
min-heap, el valor más alto (o más bajo) se encuentra en el nodo raíz.
Características clave de los Árboles Heap:
o Max-Heap y Min-Heap:
En un Max-Heap, el valor de cada nodo es mayor o igual que los valores de sus nodos hijos. En
un Min-Heap, el valor de cada nodo es menor o igual que los valores de sus nodos hijos.
o Completa Binaria:
Los Árboles Heap son completos binarios, lo que significa que todos los niveles están
completamente llenos, excepto posiblemente el último nivel, que se llena de izquierda a
derecha.
Eficiencia en Operaciones
Las operaciones fundamentales en un Heap, como la inserción y extracción del elemento
máximo (o mínimo), tienen una complejidad temporal eficiente, generalmente en el orden de
O (log n).
o Implementaciones Prácticas:
Los Heaps se utilizan comúnmente en algoritmos de ordenación, como HeapSort, y en
algoritmos que requieren acceso rápido al máximo o mínimo elemento, como en la
implementación de colas de prioridad.
o Ejemplos de Aplicación:
Se utilizan en la asignación eficiente de recursos en
sistemas operativos, en algoritmos de grafos, y en
aplicaciones que involucran la selección o
eliminación eficiente de elementos según ciertas
prioridades.
Árboles B: Son estructuras de datos de búsqueda que están diseñadas para mantener datos
ordenados y permitir operaciones de búsqueda eficientes. Están especialmente diseñados
para ser utilizados en sistemas de almacenamiento de bases de datos y sistemas de archivos,
donde el acceso rápido a los datos es esencial.
La característica distintiva de los Árboles B es su capacidad para mantener grandes conjuntos
de datos en almacenamiento secundario, como discos duros.

Características clave de los Árboles B:


●Nodos y Ramas:
Los nodos de un Árbol B pueden contener múltiples claves y múltiples ramas. Cada nodo tiene
un número variable de claves y, por lo general, un número fijo de ramas (hijos).
●Orden del Árbol:
El orden de un Árbol B, denotado como «Bx», indica el número máximo de claves que un nodo
puede contener. Esto también define el número máximo de hijos que puede tener un nodo,
que es igual al orden más uno.
●Búsqueda Eficiente:
La búsqueda se realiza de manera eficiente, ya que cada nodo contiene información sobre el
rango de claves que abarca y cómo llegar a los nodos hijos.
●Balanceo: Están diseñados para mantenerse balanceados automáticamente durante las
operaciones de inserción y eliminación. Esto ayuda a garantizar que la altura del árbol no
crezca de manera desproporcionada.
●Utilización de Almacenamiento Secundario:
Dado que los Árboles B están diseñados para almacenar grandes conjuntos de datos en
almacenamiento secundario, se pueden usar eficientemente en entornos donde los datos
residen en discos duros.
●División y Fusión de Nodos:
o Durante las operaciones de inserción, si un nodo excede su orden, se divide en dos nodos
más pequeños.
o Durante las operaciones de eliminación, si un nodo queda por debajo de su orden mínimo,
se fusiona con un nodo vecino.
●Implementaciones en Sistemas de Almacenamiento:
Los Árboles B son ampliamente utilizados en sistemas de bases de datos y sistemas de
archivos para garantizar un acceso eficiente a los datos almacenados en discos duros.
Elementos básicos para entender su definición:
1.Estructura Jerárquica:
●Un árbol organiza los datos de manera jerárquica, lo que significa que los elementos están
dispuestos en niveles. Cada nivel, excepto posiblemente el último, está completamente
ocupado por nodos, y estos nodos están conectados por aristas.
2.Nodos:
●Cada elemento individual en un árbol se llama «nodo». Cada nodo tiene un valor o clave que
lo identifica de manera única dentro del árbol.
3.Raíz:
●El nodo superior en un árbol se llama la «raíz». Es el punto de partida para cualquier
recorrido o búsqueda en el árbol. Un árbol solo tiene una raíz.
4.Nodos Padres, Hermanos e Hijos:
●Padre: Cada nodo, excepto la raíz, tiene un «padre», que es el nodo inmediatamente
superior en la jerarquía.
●Hermanos: Los nodos conectados al mismo padre se llaman «hermanos».
●Hijos: Los nodos que se encuentran directamente debajo de un nodo dado se llaman «hijos».
5.Hojas:
●Los nodos que no tienen hijos se llaman «hojas» o nodos terminales. Son los nodos que se
encuentran en el nivel más bajo del árbol.
6.Subárbol:
●Cada nodo en un árbol puede ser considerado como la raíz de un subárbol, que es
simplemente una porción del árbol completo. Este subárbol incluye al nodo y a todos sus
descendientes.
7.Altura del Árbol:
●La longitud del camino más largo desde la raíz hasta una hoja se llama «altura del árbol». En
otras palabras, es el número máximo de niveles en el árbol.
8.Grado de un Nodo:
●El número de hijos que tiene un nodo se llama su «grado». En un árbol general, un nodo
puede tener cualquier número de hijos. En un árbol binario, un nodo puede tener hasta dos
hijos.
En estructura de datos, los árboles consisten en una estructura no lineal que se utiliza para
representar datos con una relación jerárquica en la que cada elemento tiene un único
antecesor y puede tener varios sucesores.
Los mismos se encuentran clasificados en: árbol general, un árbol donde cada elemento puede
tener un número ilimitado de sub árboles y árboles binarios, que son una estructura de datos
homogénea, dinámica y no lineal en donde a cada elemento le pueden seguir como máximo
dos nodos.
Árbol Binario
Un árbol binario se puede definir como una estructura de datos
utilizada en la ciencia de la computación. Esta estructura inicia con
una raíz que luego se extiende en dos ramificaciones hasta que
finalmente terminan en una hoja.
En otras palabras, se podría decir que un árbol
binario inicia con un nodo que funciona como una raíz. Luego, de esa raíz se originan dos
nuevos nodos o ramificaciones que se conocen como hijos.
Cada raíz solo puede tener dos hijos o ramificaciones. Por esa razón, se denomina árbol
binario. Una ramificación se presenta hacia el lado derecho y la otra hacia el lado izquierdo.
Efectivamente, un árbol binario es una estructura de datos que relaciona información de
manera jerárquica no lineal. Por ello, justamente recibe el nombre de árbol por la manera
como se presenta la información. La información se estructura de forma ramificada como si
fuera un árbol. Adicionalmente, es binario porque únicamente se desprenden dos ramas.
Se estructura de la siguiente forma:
●Raíz: La raíz es el primer subconjunto y solo contiene un elemento.
●Subárbol izquierdo: Representa un segundo subconjunto y
es igualmente un árbol binario. Se le reconoce como
subárbol izquierdo del árbol original.
●Subárbol derecho: El tercer subconjunto es también un
árbol binario y es conocido como el subárbol derecho del
árbol original.

https://blog.soyhenry.com/que-es-una-estructura-de-datos-en-programacion/
#:~:text=Estructura%20de%20datos%20no%20lineales%20estructura%20de,%C3%BAnico
%20antecesor%20y%20puede%20tener%20varios%20sucesores.
https://www.apinem.com/arboles-programacion/
https://economipedia.com/definiciones/arbol-binario.html#:~:text=Un%20%C3%A1rbol
%20binario%20se%20puede,%C3%BAnicamente%20se%20desprenden%20dos%20ramas.

Representación interna de los árboles de búsqueda


La representación interna de los árboles de búsqueda, como los árboles binarios de búsqueda
(ABB), se basa en el uso de nodos conectados por referencias. Cada nodo típica mente
contiene: un valor o clave, una referencia al nodo hijo izquierdo, y una referencia al nodo hijo
derecho. La raíz del árbol es el nodo de inicio, y los nodos hoja son aquellos que no tienen
hijos.

Implantación de un árbol de búsqueda


La figura 1 ilustra está propiedad de un árbol binario de búsqueda, mostrando las claves sin
ningún valor asociado. Observe que la propiedad es válida para cada padre e hijo. Todas las
claves del árbol izquierdo son menores que la clave de la raíz. Todas las claves en el su bárbol
derecho son mayores que la raíz.

Explicación breve del árbol de búsqueda:


El árbol de búsqueda de la figura 1 representa los nodos que existen después de haber
insertado las siguientes claves: 70, 31, 93, 94, 14, 23, 73
Dado que 70 fue la primera clave insertada en el árbol, es la raíz. A continuación, 31 es menor
que 70, por lo que se convierte en el hijo izquierdo de 70. Luego, 93 es mayor que 70, por lo
que se convierte en el hijo derecho de 70. Ahora tenemos dos niveles del árbol llenos, así que
la siguiente clave va a ser el hijo izquierdo o derecho de 31 o 93. Dado que 94 es mayor que 70
y 93, se convierte en el hijo derecho de 93. Similar mente 14 es menor que 70 y 31, por lo que
se convierte en el hijo izquierdo de 31. 23 es también menor que 31, por lo que debe estar en
el su bárbol izquierdo de 31. Sin embargo, es mayor que 14, por lo que se convierte en el hijo
derecho de 14.
Representación interna de los árboles de búsqueda

La representación interna de los árboles de búsqueda, como los árboles binarios de búsqueda
(ABB), se basa en el uso de nodos conectados por referencias. Cada nodo típicamente
contiene: un valor o clave, una referencia al nodo hijo izquierdo, y una referencia al nodo hijo
derecho. La raíz del árbol es el nodo de inicio, y los nodos hoja son aquellos que no tienen
hijos.

Implementación de un árbol de búsqueda


La figura 1 ilustra está propiedad de un árbol binario de búsqueda, mostrando las claves sin
ningún valor asociado. Observe que la propiedad es válida para cada padre e hijo. Todas las
claves del subárbol izquierdo son menores que la clave de la raíz. Todas las claves en el
subárbol derecho son mayores que la raíz.
Explicación breve del árbol de búsqueda:
El árbol de búsqueda de la figura 1 representa los nodos que existen después de haber
insertado las siguientes claves: 70, 31, 93, 94, 14, 23, 73
Dado que 70 fue la primera clave insertada en el árbol, es la raíz. A continuación, 31 es menor
que 70, por lo que se convierte en el hijo izquierdo de 70. Luego, 93 es mayor que 70, por lo
que se convierte en el hijo derecho de 70. Ahora tenemos dos niveles del árbol llenos, así que
la siguiente clave va a ser el hijo izquierdo o derecho de 31 o 93. Dado que 94 es mayor que 70
y 93, se convierte en el hijo derecho de 93. Similarmente 14 es menor que 70 y 31, por lo que
se convierte en el hijo izquierdo de 31. 23 es también menor que 31, por lo que debe estar en
el subárbol izquierdo de 31. Sin embargo, es mayor que 14, por lo que se convierte en el hijo
derecho de 14.
1.4. Operaciones en árboles binarios: (las operaciones con árboles binarios incluyen:
creación, inserción, eliminación, búsqueda, recorrido y otras operaciones específicas según
el tipo de árbol).
Las operaciones con árboles binarios incluyen la creación de un árbol vacío, la construcción de
un árbol a partir de nodos, la inserción de nuevos nodos, la eliminación de nodos, la búsqueda
de nodos, y el recorrido del árbol. Estas operaciones son fundamentales para manipular y
utilizar árboles binarios de manera efectiva.
Operaciones detalladas:
1 creación:
Un árbol binario puede crearse vacío, o a partir de nodos existentes, utilizando una función de
creación que generalmente implica definir un nodo raíz y, opcionalmente, sus hijos izquierdo y
derecho.
2 inserción:
Agregar un nuevo nodo al árbol. En un árbol binario de búsqueda (ABB), la inserción sigue la
regla de que los nodos con valores menores se colocan a la izquierda y los mayores a la
derecha del nodo padre.
La operación de inserción en un árbol binario de búsqueda implica agregar un nuevo nodo al
árbol, manteniendo la propiedad de que los valores menores se ubican a la izquierda y los
mayores a la derecha de cada nodo. El proceso comienza en la raíz y, comparando el valor a
insertar con el valor del nodo actual, se decide si avanzar hacia el subárbol izquierdo o
derecho, hasta encontrar una posición vacía para el nuevo nodo.
Pasos para la inserción:
1.Comenzar en la raíz: Se inicia la búsqueda en el nodo raíz del árbol.
2.Comparación: Se compara el valor del nuevo nodo con el valor del nodo actual.
3.Decisión: Si el valor del nuevo nodo es menor, se continúa la búsqueda en el subárbol
izquierdo; si es mayor, en el subárbol derecho.
4.Repetición: Los pasos 2 y 3 se repiten hasta encontrar una posición vacía (un nodo con un
hijo izquierdo o derecho nulo) donde se pueda insertar el nuevo nodo.
5.Inserción: Una vez encontrada la posición vacía, se inserta el nuevo nodo.
6.
Ejemplo:
Imaginemos un árbol binario de búsqueda con la siguiente estructura:

Si queremos insertar el valor 6, seguiríamos estos pasos:


1.Comenzamos en la raíz (5).
2.6 es mayor que 5, por lo tanto, vamos al subárbol derecho.
3.El subárbol derecho no tiene hijos.
4.Insertamos el 6 como hijo derecho de 5.
El árbol resultante sería:

3 eliminación:
Retirar un nodo del árbol. La eliminación de un nodo puede ser sencilla si es una hoja (sin
hijos), o más compleja si tiene uno o dos hijos, requiriendo ajustes en la estructura del árbol
para mantener su integridad.
Para eliminar un nodo en un Árbol Binario de Búsqueda (BBA), comience desde la raíz y
navegue hasta el nodo que desea eliminar según su clave. Si se encuentra el nodo, la
eliminación se gestiona en tres casos: si el nodo no tiene hijos, elimínelo; si tiene un hijo,
reemplácelo con su hijo; si tiene dos hijos, busque su predecesor inordenado (el nodo más
grande del subárbol izquierdo), conecte su hijo derecho a su padre y conecte el hijo izquierdo
del nodo al nuevo hijo de su padre. Devuelva el BST modificado después de la eliminación.
paso 1: Busque el nodo que desea eliminar:
Comenzar desde la raíz y, si la clave es menor que el nodo actual, desplazarse al subárbol
izquierdo; si la clave es mayor que el nodo actual, desplazarse al subárbol derecho. Repetir
este proceso hasta encontrar el nodo que se desea eliminar o alcanzar un nodo nulo.

Caso 1: El nodo que se va a eliminar no tiene hijos. En este caso, simplemente se puede
eliminar.
Caso 2: El nodo que se va a eliminar tiene un nodo hijo. En este caso, el nodo hijo reemplaza al
nodo que se va a eliminar.
Caso 3: El nodo a eliminar tiene dos hijos. En este caso, el nodo a eliminar se reemplaza por su
sucesor en orden (el nodo más pequeño del subárbol derecho).
●Encuentre el predecesor inordenado del nodo recorriendo el subárbol izquierdo del nodo
hasta encontrar el nodo más a la derecha (el más grande). Almacene esto como lastRight.
●Establezca el último derecho del hijo en el nodo que se va a eliminar.
●Omita el nodo que se va a eliminar conectando directamente la raíz al hijo izquierdo del
nodo, es decir, la raíz del subárbol izquierdo.

4 búsqueda:
Localizar un nodo específico en el árbol. La búsqueda se realiza comparando el valor del nodo
con el valor buscado, siguiendo el camino de nodos que corresponda, ya sea a la izquierda o a
la derecha, según el valor del nodo.

Búsqueda de un nodo
Cuando queremos recuperar datos de nuestra estructura de árbol binario de búsqueda,
sacaremos provecho de que estas estructuras están ordenadas. Básicamente, empezamos
comprobando el nodo raíz, y si este es el que buscamos, ya hemos acabado. Si no lo es, nos
moveremos a su hijo izquierdo o al derecho, dependiendo de si el dato que buscamos es
menor o mayor del que contiene el nodo padre. Y así proseguiremos hasta encontrar el dato o
terminar de recorrer el árbol sin encontrarlo.
Este proceso es recursivo, ya que cuando nos movemos a un nodo hijo, podemos considerar a
este como el nodo raíz de un nuevo árbol. El proceso de búsqueda podría expresarse como:

Que también podríamos representar en pseudocódigo de la siguiente manera:

Ejemplo de operaciones con árboles binarios de búsqueda


En este apartado, vamos a ver ejemplos de las operaciones con árboles binarios. Voy a usar un
árbol binario con números porque entiendo que es más intuitivo, nos resulta más fácil de
ordenar y nos va a resultar más fácil de seguir.
Paso 1: El árbol
Vamos a usar un árbol binario con valores numéricos en los nodos, porque entiendo que es
mucho más visual y se podrá seguir la explicación más fácilmente. Resulta más sencillo
ordenar números que nombres.
Nuestro árbol de partida sería el siguiente:
Paso 2: Búsqueda de un nodo
Imaginemos que queremos localizar el nodo con valor 24. El camino que recorreríamos es el
que se pinta en rojo:

Búsqueda de un nodo
Empezamos a recorrer el árbol por la raíz, que es con el primer nodo con el que comparamos.
Seguiríamos los siguientes pasos:
1.Comparamos el valor buscado (24) con el del nodo raíz (18), como el valor buscado es
mayor, de existir en el árbol, estaría a la derecha.
2.Nos movemos al hijo derecho del nodo raíz. Comparamos el valor buscado (24) con el valor
del nodo (25), como el primero es menor, de existir en el árbol, estaría en el subárbol
izquierdo.
3.Nos movemos al hijo izquierdo de 25, que es 23.
4.Comparamos el valor buscado (24) con el valor del nodo (23). Como el primero es mayor, de
existir, estaría a la derecha.
5.Nos movemos al hijo derecho de 23, que es 24. Hemos llegado al nodo buscado.
Paso 3: Búsqueda de un nodo que no existe
Supongamos ahora que buscamos el nodo de valor 27, que podemos comprobar que no existe
en nuestro árbol. Básicamente, el proceso de búsqueda no cambia con respecto al explicado
en el Paso 2, sin embargo, en este caso no vamos a encontrar el nodo, llegaremos a un hueco
donde podría estar el nodo buscado, pero no está.

Búsqueda de nodo que no existe


Empezamos a recorrer el árbol por la raíz, que es con el primer nodo con el que comparamos.
Seguiríamos los siguientes pasos:
●Comparamos el valor buscado (27) con el del nodo raíz (18), como el valor buscado es mayor,
de existir en el árbol, estaría a la derecha.
●Nos movemos al hijo derecho del nodo raíz. Comparamos el valor buscado (27) con el valor
del nodo (25), como el primero es mayor, de existir en el árbol, estaría en el subárbol derecho.
●Por tanto, nos movemos al hijo derecho del nodo 25 y damos con el nodo 29. El valor
buscado (27) es menor que el valor del nodo (29), con lo que de existir el nodo con valor 27,
estaría a la izquierda del nodo de valor 29.
●Intentamos movernos al hijo izquierdo del nodo 29 pero vemos que el puntero
correspondiente apunta a NULL, luego el nodo 29 no tiene hijo izquierdo.
●Concluimos que el nodo de valor 27 no existe en nuestro árbol.
Paso 4: Inserción de un nodo

Intento de inserción de un nodo existente


Paso 5: Eliminación de un nodo hoja
Habíamos dicho que el proceso de eliminación de un nodo era el más complicado y que
adoptamos estrategias distintas dependiendo de los hijos que tuviera el nodo a eliminar.
El caso más sencillo es cuando el nodo no tiene ningún hijo, es decir, cuando es un nodo hoja.
Eliminación de un nodo hoja
En este caso, sencillamente buscábamos el nodo y lo eliminábamos. Además, hacíamos que el
nodo del padre que le apuntaba pasara a apuntar a NULL.
Paso 6: Eliminación de un nodo con un hijo

Eliminación de un nodo con un hijo


●Empezamos localizando el nodo a eliminar, en este caso, aquel con el valor 12.
●Comparamos con el nodo raíz, como 12 es menor que 18, nos movemos al nodo hijo
izquierdo.
●El hijo izquierdo tiene el valor 9, que es menor que 12, luego nos movemos al hijo derecho de
este, y en ese nodo ya encontramos el nodo que buscábamos.
●El nodo con valor 12, tiene un único hijo, el izquierdo, con el valor 11.
●Hacemos que el puntero que apunta al nodo a eliminar, puntero ubicado en el padre del
nodo a eliminar, apunte al hijo de este. Es decir, el nodo con valor 9 pasa a tener un hijo
derecho con valor 11.
●Ahora ya podemos borrar el nodo 12.
Paso 7: Eliminación de un nodo con dos hijos, promocionando un valor del subárbol
izquierdo
Habíamos visto que cuando queremos eliminar un nodo que tiene dos hijos, tenemos dos
posibilidades para rellenar el hueco que este nodo deja: Podemos tomar el nodo de su
subárbol izquierdo que tenga un valor mayor, o el nodo de su subárbol derecho que tenga un
valor menor.
Veamos el primer caso con el ejemplo de la siguiente figura:

Eliminación de un nodo con un hijo


●Promocionando el subárbol izquierdo
●Queremos eliminar nada más ni nada menos que el nodo raíz, con valor 18.
●El nodo raíz tiene dos subárboles, el de la izquierda con nodo raíz con valor 9, y el de la
derecha con nodo raíz de valor 25.
●Al eliminar el nodo de valor 18, tendremos que reemplazarlo por otro nodo del árbol, que
pasaría a ocupar la posición de este en la estructura. En esta ocasión, vamos a buscar dicho
nodo en el subárbol izquierdo.
●Cómo buscamos el nodo en el subárbol izquierdo, tenemos que buscar el nodo de mayor
valor, que por cómo construimos el árbol, coincidirá con el nodo que esté más a la derecha. En
nuestro caso, el nodo de valor 12.
●Sustituimos el nodo de valor 18 por el de valor 12.
●Eliminamos el nodo inicial de valor 12 que previamente hemos copiado en el nodo de valor
18. El nodo inicial con valor 12 no puede tener dos hijos, ya que, si tuviera un hijo a la derecha,
no sería el nodo mayor del subárbol izquierdo. Así es que este nodo podrá tener un hijo o
ninguno. La eliminación de un nodo en ambos casos, la he explicado en los pasos 6 y 5
respectivamente.
Tras realizar estas operaciones, nos queda el siguiente árbol binario:

Subárbol izquierdo promocionado


Paso 8: Eliminación de un nodo con dos hijos, promocionando un valor del subárbol derecho

Tras realizar estas operaciones, nos queda el siguiente árbol binario:

Subárbol derecho promocionado


5 recorrido:
Ahora que hemos examinado la funcionalidad básica de nuestra estructura de datos árbol, es
hora de mirar algunos patrones de uso adicionales para los árboles. Estos patrones de uso se
pueden dividir en las tres maneras en que tenemos acceso a los nodos del árbol. Hay tres
patrones de uso común para visitar todos los nodos de un árbol. La diferencia entre estos
patrones es el orden en que es visitado cada nodo. Llamamos a estas visitas de los nodos un
“recorrido”. Los tres recorridos que vamos a ver se llaman preorden, inorden y postorden.
Comencemos definiendo estos tres recorridos con más cuidado, para luego mirar algunos
ejemplos donde estos patrones son útiles.
preorden En un recorrido en preorden, visitamos primero el nodo raíz, luego recursivamente
realizamos un recorrido en preorden del subárbol izquierdo, seguido de un recorrido recursivo
en preorden del subárbol derecho.
inorden En un recorrido en inorden, realizamos recursivamente un recorrido en inorden en el
subárbol izquierdo, visitamos el nodo raíz, y finalmente hacemos un recorrido recursivo en
inorden del subárbol derecho.
postorden En un recorrido en postorden, realizamos recursivamente recorridos en postorden
del subárbol izquierdo y del subárbol derecho seguidos de una visita al nodo raíz.
Veamos algunos ejemplos que ilustran cada uno de estos tres tipos de recorridos. Primero
veamos el recorrido en preorden. Como ejemplo de un árbol a recorrer, representaremos este
libro como un árbol. El libro es la raíz del árbol, y cada capítulo es un hijo de la raíz. Cada
sección dentro de un capítulo es un hijo del capítulo, y cada subsección es un hijo de su
sección, y así sucesivamente. La Figura 5 muestra una versión limitada de un libro con sólo dos
capítulos. Tenga en cuenta que el algoritmo de recorrido funciona para árboles con cualquier
número de hijos, pero nos limitaremos a los árboles binarios por ahora.
Referencia
https://www.fing.edu.uy/tecnoinf/mvd/cursos/eda/material/pra/anterior/p8eda.pdf
https://runestone.academy/ns/books/published/pythoned/Trees/RecorridosDeArboles.html
https://chely-arbol.blogspot.com/2008/11/tipos-de-rboles.html
Operaciones con árboles binarios de búsqueda - DATA SCIENCE
https://takeuforward.org/binary-search-tree/delete-a-node-in-binary-search-tree/
Recorrido de un árbol binario en búsqueda

En un árbol binario de búsqueda, el recorrido en orden (inorden) se realiza siguiendo estos


pasos:
Recorrer el subárbol izquierdo: Se visita recursivamente el subárbol izquierdo del nodo actual.
Visitar el nodo actual: Se procesa el valor del nodo actual (por ejemplo, se imprime o se realiza
alguna operación con él).
Recorrer el subárbol derecho: Se visita recursivamente el subárbol derecho del nodo actual.
La propiedad clave de un árbol binario de búsqueda asegura que, al realizar un recorrido en
orden, los nodos se visitarán en orden ascendente.
Ejemplo:
Considera un árbol binario de búsqueda con la siguiente estructura:
4
/\
2 5
/\
1 3

Un recorrido en orden produciría la siguiente secuencia: 1, 2, 3, 4, 5.


Importancia en la Búsqueda:
El recorrido en orden es fundamental para la búsqueda eficiente de elementos en un árbol
binario de búsqueda. Al mantener el orden de los elementos, se puede determinar
rápidamente si un valor dado está presente o no en el árbol, evitando la necesidad de
explorar todo el árbol si el valor no se encuentra en la ruta de búsqueda.
parte práctica:
#include <iostream>

using namespace std;

// Definición del nodo del árbol

struct Nodo {

int dato; // Valor almacenado en el nodo

Nodo* izq; // Puntero al subárbol izquierdo

Nodo* der; // Puntero al subárbol derecho

// Constructor para inicializar el nodo

Nodo(int valor) {

dato = valor;

izq = der = nullptr;

};

// Función para insertar un nuevo valor en el árbol

Nodo* insertar(Nodo* raiz, int valor) {

if (raiz == nullptr)

return new Nodo(valor); // Si el árbol está vacío, crea nuevo nodo

if (valor < raiz->dato)

raiz->izq = insertar(raiz->izq, valor); // Inserta a la izquierda

else

raiz->der = insertar(raiz->der, valor); // Inserta a la derecha

return raiz;

// Función para buscar un valor en el árbol

bool buscar(Nodo* raiz, int valor) {

if (raiz == nullptr) return false;

if (raiz->dato == valor) return true;

if (valor < raiz->dato)

return buscar(raiz->izq, valor);

else

return buscar(raiz->der, valor);


}

// Recorrido inorden (izquierda - raíz - derecha)

void inorden(Nodo* raiz) {

if (raiz != nullptr) {

inorden(raiz->izq);

cout << raiz->dato << " ";

inorden(raiz->der);

// Recorrido preorden (raíz - izquierda - derecha)

void preorden(Nodo* raiz) {

if (raiz != nullptr) {

cout << raiz->dato << " ";

preorden(raiz->izq);

preorden(raiz->der);

// Recorrido postorden (izquierda - derecha - raíz)

void postorden(Nodo* raiz) {

if (raiz != nullptr) {

postorden(raiz->izq);

postorden(raiz->der);

cout << raiz->dato << " ";

// Función para eliminar un nodo del árbol

Nodo* eliminar(Nodo* raiz, int valor) {

if (raiz == nullptr) return raiz;

if (valor < raiz->dato) {

raiz->izq = eliminar(raiz->izq, valor);


} else if (valor > raiz->dato) {

raiz->der = eliminar(raiz->der, valor);

} else {

// Caso 1: nodo sin hijos o con un solo hijo

if (raiz->izq == nullptr) {

Nodo* temp = raiz->der;

delete raiz;

return temp;

} else if (raiz->der == nullptr) {

Nodo* temp = raiz->izq;

delete raiz;

return temp;

// Caso 2: nodo con dos hijos - buscar el sucesor (mínimo del subárbol derecho)

Nodo* sucesor = raiz->der;

while (sucesor->izq != nullptr)

sucesor = sucesor->izq;

// Reemplazar valor y eliminar el sucesor

raiz->dato = sucesor->dato;

raiz->der = eliminar(raiz->der, sucesor->dato);

return raiz;

// Función principal

int main() {

Nodo* raiz = nullptr;

int valores[] = {15, 9, 20, 6, 14, 13, 17, 64, 26, 72};

// Insertar valores en el árbol

for (int valor : valores)

raiz = insertar(raiz, valor);


// Mostrar recorridos

cout << "Recorrido inorden: ";

inorden(raiz);

cout << "\nRecorrido preorden: ";

preorden(raiz);

cout << "\nRecorrido postorden: ";

postorden(raiz);

// Buscar un valor en el árbol

int buscar_valor = 26;

cout << "\n\nBuscando " << buscar_valor << ": ";

cout << (buscar(raiz, buscar_valor) ? "Encontrado" : "No encontrado") << endl;

// Eliminar un nodo y mostrar recorrido inorden después

int eliminar_valor = 20;

raiz = eliminar (raiz, eliminar_valor);

cout << "Inorden después de eliminar " << eliminar_valor << ": ";

inorden(raiz);

return 0;

}
Compilación en C++
CUANDO RECOREMOS, RESULTADO SERIA

También podría gustarte