Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Árboles, recorridos y eliminación en árboles 2-3
1. PROGRAMACIÓN LÓGICA Y FUNCIONAL
NILTON SANCHEZ
RAFAEL REYES
FUNDACIÓN UNIVERSITARIA SAN MARTIN
INGENIERIA DE SISTEMAS
2. ÁRBOLES
Es una extensión de una estructura de datos que imita la
forma de árbol. Está compuesta por Nodos y conexiones a
hojas llamadas “hijos” que a su vez tienen “hijos” y así
consecutivamente.
Función: Organizar la información de manera que facilite su
entendimiento, análisis y funcionamiento. Es utilizada para modelos de
Bases de Datos, Administración de archivos, operaciones de recorridos y
caminos simples, inteligencia artificial, entre otras operaciones.
Tipos: Entre los tipos de árboles existen los árboles binarios, AVL, Rojo-
Negro, AA, B,B+ o Eneários. De aquí se origina la base de los grafos.
3. RECORRIDOS DE UN ÁRBOL
Se llama recorrido de un árbol al proceso que permite
acceder una sola vez a cada uno de los nodos del árbol para
examinar el conjunto completo de nodos.
Recorrido en Profundidad: el proceso exige alcanzar las profundidades de
un camino desde la raíz hacia el descendiente mas lejano del primer hijo,
antes de proseguir con el segundo.
Recorrido en Anchura: el proceso se realiza horizontalmente desde la raíz
a todos su hijos antes de pasar con la descendencia de alguno de ellos.
4. COMO RECORRER UN ÁRBOL
Al visitar los nodos de un árbol existen algunas maneras útiles en las que se pueden
ordenar sistemáticamente los nodos de un árbol.
Los ordenamientos más importantes son llamados: pre-orden, post-orden y en-
orden y se definen recursivamente como sigue:
Si un árbol T es nulo, entonces, la lista vacía es el listado pre-orden, post-orden y en-
orden del árbol T.
Si T consiste de un sólo nodo n, entonces, n es el listado pre-orden, post-orden y en-
orden del árbol T.
Los algoritmos de recorrido de un árbol binario presentan tres tipos de actividades
comunes:
• visitar el nodo raíz
• recorrer el subárbol izquierdo
• recorrer el subárbol derecho
Estas tres acciones llevadas a cabo en distinto orden proporcionan los distintos
recorridos del árbol.
5. Recorrido en PRE-ORDEN:
• Visitar el raíz
• Recorrer el subárbol izquierdo en pre-orden
• Recorrer el subárbol derecho en pre-orden
CÓDIGO:
void preorden(tArbol *a)
{
if (a != NULL)
{
tratar(a); //Realiza una operación en nodo
preorden(a->hIzquierdo);
preorden(a->hDerecho);
}
}
6. Recorrido EN-ORDEN
• Recorrer el subárbol izquierdo en en-orden
• Visitar el raíz
• Recorrer el subárbol derecho en en-orden
CÓDIGO:
void inorden(tArbol *a)
{
if (a != NULL)
{
inorden(a->hIzquierdo);
tratar(a); //Realiza una operación en nodo
inorden(a->hDerecho);
}
}
7. Recorrido en POST-ORDEN
• Recorrer el subárbol izquierdo en post-orden
• Recorrer el subárbol derecho en post-orden
• Visitar el raíz
CÓDIGO:
void postorden(tArbol *a)
{
if (a != NULL)
{
postorden(a->hIzquiedo);
postorden(a->hDerecho);
tratar(a); //Realiza una operación en nodo
}
}
9. Recorreremos el Árbol Siguiente:
Recorrido Pre Orden (RID)
El recorrido en Pre Orden del árbol es el siguiente: 15, 6, 4, 10, 20, 17, 22
Recorrido En Orden(IRD)
El recorrido en En Orden del árbol es el siguiente: 4, 6, 10, 15, 17, 20, 22
Recorrido Post Orden(IDR)
El recorrido en Post Orden del árbol es el siguiente: 4, 10, 6, 17, 22, 20, 15
10. Árbol N-ario
Un árbol n-ario es una estructura recursiva, en la cual cada elemento tiene un número
cualquiera de árboles n-arios asociados. En la siguiente figura se muestra el
formalismo gráfico escogido para representar este objeto abstracto. En él se hace
explícita la raíz, y cada uno de los n subárboles que tiene asociados. Un árbol vacío se
representa con el símbolo .
Los recorridos principales son:
inorden( a ) = inorden( a1 ), e, inorden( a2 ), ..., inorden( an )
preorden( a ) = e, preorden( a1 ), ..., preorden( an )
postorden( a ) = postorden( a1 ), ...., postorden( an ), e
11. Ejemplo Árbol N-ario
Para el árbol n-ario de la figura:
El orden del árbol es 4
El orden del elemento a es 3
preorden = a, b, c, e, f, d, g, j, k, l, m, h, i
inorden = b, a, e, c, f, j, g, k, l, m, d, h, i
postorden = b, e, f, c, j, k, l, m, g, h, i, d, a
Niveles = a, b, c, d, e, f, g, h, i, j, k, l, m
Altura = 4
Peso = 13
Los hijos de g son los elementos j, k, l, m
El ancestro común más próximo de k y h es d
12. EJEMPLO CASO REAL
Considere el caso de una fábrica, en la cual se quiere hacer el
modelaje de un automóvil en términos de sus componentes: cada
pieza debe estar relacionada con todos los elementos que la
constituyen, como se sugiere en la siguiente figura vemos que es
insuficiente un árbol binario para manejar este tipo de estructuras,
ya que el número de hijos no se puede restringir a dos.
13. ARBOLES 2-3
Son un tipo de árbol balanceado por altura (height balanced). Se
define como un árbol en dónde todos los nodos no-terminales
tienen 2 ó 3 descendientes y todos los nodos hoja tienen la
misma longitud (path length) o distancia desde la raíz.
Fueran introducidos con el objeto de mejorar el tiempo de
acceso en estructuras de datos manejadas en memoria
secundaria, en las cuales el número de consultas a un registro
influye de manera determinante en el tiempo de respuesta de la
operación.
La estructura de árbol 2-3 exige que el crecimiento no se haga a
nivel de las hojas (aunque la inserción sigue siendo en las hojas),
sino que a nivel de la raíz, ya que todas las hojas se deben
mantener siempre en el mismo nivel. El proceso global de
inserción comienza por localizar la hoja en la cual se debe
agregar el elemento.
14. PROPIEDADES 2-3
Un árbol 2-3 permite que un nodo tenga dos o tres hijos. Esta
característica le permite conservar el balanceo tras insertar o
borrar elementos, por lo que el algoritmo de búsqueda es casi
tan rápido como en un árbol de búsqueda de altura mínima. Por
otro lado, es mucho más fácil de mantenerlo.
En un árbol 2-3, los nodos internos han de tener 2 ò 3 hijos y
todas las hojas han de estar al mismo nivel. De forma recursiva
se pueden definir como:
A es un árbol 2-3 de altura h si:
•A es un árbol vacío (un árbol 2-3 de altura 0), o
•A es de la forma (r, I, D), donde r es un nodo e I y D son árboles
2-3 de altura h − 1, o
•A es de la forma (r, I, C, D), donde r es un nodo e I, C y D son
árboles 2-3 de altura h-1.
15. PROPIEDADES 2-3
Para usar estos árboles de forma eficiente en las búsquedas, hay
que introducir un orden entre los elementos por lo que un árbol
A es un árbol 2-3 de búsqueda de altura h si:
•Todos los elementos de I son menores que r y todos los
elementos de D son mayores que r.
•A es de la forma (r1, r2,I, C, D), donde r1 _ r2, I, Ac y D son
árboles 2-3 de búsqueda de altura h-1 y todos los elementos de I
son menores que r1, todos los elementos de C son mayores que
r1 y menores que r2 y todos los elementos de D son mayores
que r2.
•Esta definición implica que el número de hijos de un nodo es
siempre uno más que el número de elementos que contiene ese
nodo. En el caso de las hojas se permiten uno o dos elementos
en el nodo. Desde ahora nos referiremos a los árboles 2-3 de
búsqueda simplemente como árboles 2-3.
16. ESPECIFICACIÓN
La especificación del tipo ARBOL23 es muy similar a la de otros
árboles con una diferencia que es la definición de tres
operaciones generadoras en lugar de dos. Árbol Vacío es la
operación que genera un árbol sin elementos, como en los otros
tipos y hay una operación, consArbol, que genera un árbol 2-3
cuya raíz tiene un solo elemento y dos hijos y otra, cons3Arbol,
que genera un árbol 2-3 cuya raíz tiene dos elementos y tres
hijos. Estas dos últimas operaciones son los generadores que se
mantienen ocultos al usuario.
18. Ejemplo de eliminar :
Vamos a eliminar 65 de este árbol,
65 es un nodo interno.
65 se encuentra ahora en una
ubicación no válida, lo vamos a
eliminar
19. Ahora haremos lo mismo
para eliminar 70 que es un
nodo interno
70 se encuentra ahora en
una ubicación no válida,
porque vamos a eliminarlo
20. La eliminación de la hoja
nos deja con un 2-3 árbol
no valido
Combinar para fijar los
nodos del árbol
22. BIBLIOGRAFÍA
•WIKIPEDIA. Árbol 2-3. {En línea}. http://es.wikipedia.org/wiki/%C3%81rbol_2-
3 5 de Enero de 2012.
•CUEVAS FLORES, Ricardo. Estructura y Organización de Datos. {En línea}.
http://estructuradedatos09111005.blogspot.com/2011/11/arboles.html. 9 de
Noviembre de 2011.
•VILLALOBOS, Jorge. Diseño y Manejo de Estructuras de Datos en C. McGraw-
Hill. Enero 1996.