You are on page 1of 16

INSTITUTO TECNOLOGICO DE ACAPULCO

Resumen: Arboles y Grafos

ESTRUCTURA DE DATOS

PROFESOR:

JORGE CARRANZA GOMEZ

CARRERA:

INGENIERÍA EN SISTEMAS COMPUTACIONALES

SEMESTRE: 4

ALUMNO:

RAMIREZ RIZO RAFAEL

07-Abril-2022
Indice
Introducción ......................................................................................................................................3
ÁRBOLES ............................................................................................................................................4
Operaciones en árboles binarios .......................................................................................................6
Operación de inserción..................................................................................................................6
Operación de eliminación..............................................................................................................7
Árboles binarios completos ...............................................................................................................8
Representación de los árboles binarios ............................................................................................8
Representación por punteros ........................................................................................................8
Recorrido de un árbol binario ...........................................................................................................9
Insertar un elemento .......................................................................................................................10
Eliminación de un elemento ............................................................................................................10
GRAFOS ............................................................................................................................................12
Terminología de grafos ....................................................................................................................12
Representación de grafos ................................................................................................................13
Lista de adyacencia..........................................................................................................................13
Recorrido de gráficas dirigidas ........................................................................................................14
Método Warshall .............................................................................................................................14
Gráficas no dirigidas ........................................................................................................................14
Bibliografía.......................................................................................................................................16
Introducción

Un grafo conexo que no contiene ciclos se llama árbol. Los árboles son particularmente
útiles en informática, pues son usados en un amplio espectro de algoritmos. Por ejemplo,
los árboles se usan para construir algoritmos eficientes que localizan elementos en una
lista. También pueden usarse en algoritmos, como los códigos de Huffman, que construyen
códigos compresores eficientes, ahorrando costos en la transmisión de los datos y en su
posterior almacenamiento.

Un grafo es un conjunto, no vacío, de objetos llamados vértices (o nodos) y una selección


de pares de vértices, llamados aristas (edges en inglés) que pueden ser orientados o no.
ÁRBOLES
El árbol es una estructura de datos fundamental en informática, muy utilizada en todos sus
campos, porque se adapta a la representación natural de informaciones homogéneas
organizadas y de una gran comodidad y rapidez de manipulación. Esta estructura se
encuentra en todos los dominios (campos) de la informática, desde la pura algorítmica
(métodos de clasificación y búsqueda...) a la compilación (árboles sintácticos para
representar las expresiones o producciones posibles de un lenguaje) o incluso los dominios
de la inteligencia artificial (árboles de juegos, árboles de decisiones, de resolución, etc.).
Las estructuras tipo árbol se usan principalmente para representar datos con una relación
jerárquica entre sus elementos, como son árboles genealógicos, tablas, etc.
La representación y terminología de los árboles se realiza con las típicas notaciones de las
relaciones familiares en los árboles genealógicos: padre, hijo, hermano, ascendente,
descendiente, etc.

Las definiciones a tener en cuenta son:


• Raíz del árbol. Todos los árboles que no están vacíos tienen un único nodo raíz. Todos
los demás elementos o nodos se derivan o descienden de él. El nodo raíz no tiene padre,
es decir, no es el hijo de ningún elemento.
• Nodo, son los vértices o elementos del árbol.
• Nodo terminal u hoja (leaf node) es aquel nodo que no contiene ningún subárbol (los nodos
terminales u hojas del árbol de la Figura 13.2 son E, F, K, L, H y J).
• A cada nodo que no es hoja se asocia uno o varios subárboles llamados descendientes
(offspring) o hijos. Deigual forma, cada nodo tiene asociado un antecesor o ascendiente
llamado padre.
• Los nodos de un mismo padre se llaman hermanos.
• Los nodos con uno o dos subárboles —no son hojas ni raíz— se llaman nodos interiores
o internos.
• Una colección de dos o más árboles se llama bosque (forest).
• Todos los nodos tienen un solo padre —excepto el raíz— que no tiene padre.
• Se denomina camino el enlace entre dos nodos consecutivos y rama es un camino que
termina en una hoja.
• Cada nodo tiene asociado un número de nivel que se determina por la longitud del camino
desde el raíz al nodomespecífico.
ÁRBOL BINARIO
Existe un tipo de árbol denominado árbol binario que puede ser implementado fácilmente
en una computadora.
Un árbol binario es un conjunto finito de cero o más nodos, tales que:
• Existe un nodo denominado raíz del árbol.
• Cada nodo puede tener 0, 1 o 2 subárboles, conocidos como subárbol izquierdo y subárbol
derecho.

Dos árboles binarios se dice que son similares si tienen la misma estructura, y son
equivalentes si son similares y contienen la misma información.
Un árbol binario está equilibrado si las alturas de los dos subárboles de cada nodo del árbol
se diferencian en una unidad como máximo.
Operaciones en árboles binarios
En esta sección se estudian las operaciones de creación y recorrido de un árbol binario. La
primera hace referencia a crear una estructura que responda a las características
analizadas e ir almacenando información en cada uno de los nodos.
La segunda permite visitar todos los nodos de un árbol sin repetir ninguno, aprovechando
el conocimiento que se tiene acerca de la estructura.
La creación de un árbol binario se lleva a cabo a partir de la raíz. Se crea un nodo y se
almacena su información. Posteriormente se pregunta si dicho nodo tiene hijo izquierdo, si
la respuesta es afirmativa, entonces se invoca nuevamente el método pero ahora con el
subárbol izquierdo. El proceso se repite con cada nodo hasta llegar a las hojas. Luego, se
hace lo mismo para crear cada uno de los subárboles derechos. Se utiliza la instrucción
new() para asignar un espacio de memoria de manera dinámica.
El recorrido de un árbol binario consiste en visitar todos sus nodos una sola vez. Por lo
tanto, podrá hacerse (aprovechando las características de la estructura del árbol) de tres
maneras diferentes: visitando la raíz, el hijo izquierdo y el hijo derecho, o visitando el hijo
izquierdo, la raíz y el hijo derecho, o bien, visitando el hijo izquierdo, el hijo derecho y la
raíz. En los tres casos, la regla se aplica hasta llegar a las hojas. Estos métodos se conocen
con el nombre de preorden, inorden y postorden respectivamente.

Operación de inserción
Insertar un nuevo elemento en un árbol binario de búsqueda requiere buscar la posición
que debe ocupar el nuevo nodo de tal manera que no altere el orden del árbol. En la solución
que aquí se propone no se aceptan elementos repetidos. Pueden existir aplicaciones en las
cuales sí se permita. Sin embargo, en esta solución, si se detecta que en el árbol ya está
almacenado un valor igual al que se pretende insertar, la operación se interrumpe. Los
principales pasos para llevar a
cabo esta operación son:
1. Se evalúa si el nodo (la primera vez es la raíz) visitado está definido.
2. Si la respuesta es afirmativa, se pregunta si el dato a insertar es menor que el dato
visitado.
2.1. Si la respuesta es afirmativa, se invoca el proceso de inserción con el subárbol
izquierdo.
2.2. Si la respuesta es negativa, se pregunta si el dato a insertar es mayor que el dato
visitado.
2.2.1. Si la respuesta es afirmativa, entonces se invoca el proceso de inserción con el
subárbol derecho.
2.2.2. Si la respuesta es negativa, entonces el proceso de inserción termina sin haberse
realizado, ya que no se permiten elementos repetidos.
3. Si la respuesta al paso 1 es negativa, se crea el nuevo nodo, se almacena la información
y se establecen las ligas entre el nuevo nodo y su padre.

Operación de eliminación
Para eliminar un elemento en un árbol binario de búsqueda se requiere buscar el valor
deseado y quitar el nodo que lo contiene. Este último paso se lleva a cabo de maneras
diferentes dependiendo si el nodo eliminado es terminal o no. Si se trata de una hoja,
entonces se quita directamente. En otro caso, para no perder las ligas a sus descendientes,
se debe reemplazar por el nodo que se encuentra más a la derecha del subárbol izquierdo
o por el que se encuentra más a la izquierda del subárbol derecho. En la solución que se
da en este libro se usa el elemento que está más a la derecha del subárbol izquierdo. Los
principales pasos para llevar a cabo esta operación son:
1. Se evalúa si el nodo visitado (la primera vez es la raíz) está definido.
2. Si la respuesta es afirmativa, entonces se pregunta si el dato a eliminar es menor que el
dato visitado.
2.1. Si la respuesta es afirmativa, se invoca el proceso de eliminación con el subárbol
izquierdo.
2.2. Si la respuesta es negativa, se pregunta si el dato a eliminar es mayor que el dato
visitado.
2.2.1. Si la respuesta es afirmativa, se invoca el proceso de eliminación
con el subárbol derecho.
2.2.2. Si la respuesta es negativa, se elimina el nodo. Si es hoja, la eliminación es directa.
Si tiene sólo un hijo se reemplaza por éste y si tiene dos se reemplaza por el que está más
a la derecha del subárbol izquierdo. En estos dos últimos casos se libera el espacio de
memoria del hijo, mientras que en el primero el correspondiente al nodo en cuestión.
3. Si la respuesta al paso 1 es negativa, entonces el dato no está en el árbol. El proceso de
eliminación termina con fracaso.
Árboles binarios completos
Un árbol binario se llama completo si todos sus nodos tienen exactamente dos subárboles,
excepto los nodos de los niveles más bajos que tienen cero. Un árbol binario completo, tal
que todos los niveles están llenos, se llama árbol binario lleno.
Un árbol binario T de nivel h puede tener como máximo 2h – 1 nodos.
La altura de un árbol binario lleno de n nodos es log2(n + 1). A la inversa, el número máximo
de nodos de un árbol binario de altura h será 2h – 1
Por último, se denomina árbol degenerado un árbol en el que todos sus nodos tienen
solamente un subárbol, excepto el último.

Representación de los árboles binarios


Los árboles binarios pueden ser representados de dos modos diferentes:
• Mediante punteros (lenguajes C y C++).
• Mediante arrays o listas enlazadas.
• Vinculando nodos, objetos con miembros que referencian otros objetos del mismo tipo.

Representación por punteros


Cada nodo de un árbol será un registro que contiene al menos tres campos:
• Un campo de datos con un tipo de datos.
• Un puntero al nodo del subárbol izquierdo (que puede ser nulo-null).
• Un puntero al nodo del subárbol derecho (que puede ser nulo-null).
Recorrido de un árbol binario
Se denomina recorrido de un árbol el proceso que permite acceder una sola vez a cada uno
de los nodos del árbol. Cuando un árbol se recorre, el conjunto completo de nodos se
examina. Existen muchos modos para recorrer un árbol binario. Por ejemplo, existen seis
diferentes recorridos generales en profundidad de un árbol binario, simétricos dos a dos.
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 repartidas en diferentes órdenes proporcionan los diferentes recorridos
del árbol en profundidad. Los más frecuentes tienen siempre en común recorrer primero el
subárbol izquierdo y luego el subárbol derecho. Los algoritmos que lo realizan llaman pre-
orden, post-orden, in-orden y su nombre refleja el momento en que se visita el nodo raíz.
En el in-orden el raíz está en el medio del recorrido, en el pre-orden el raíz está el primero
y en el post-orden el raíz está el último:
Recorrido pre-orden
1. Visitar el raíz.
2. Recorrer el subárbol izquierdo en pre-orden.
3. Recorrer el subárbol derecho en pre-orden.

Recorrido in-orden
1. Recorrer el subárbol izquierdo en in-orden.
2. Visitar el raíz.
3. Recorrer el subárbol derecho en in-orden.
Recorrido post-orden
1. Recorrer el subárbol izquierdo en post-orden.
2. Recorrer el subárbol derecho en post-orden.
3. Visitar el raíz.

Insertar un elemento
Para insertar un elemento en el árbol A se ha de comprobar, en primer lugar, que el
elemento no se encuentra en el árbol, ya que su caso no precisa ser insertado. Si el
elemento no existe, la inserción se realiza en un nodo en el que al menos uno de los dos
punteros izq o der tenga valor nulo.
Para realizar la condición anterior se desciende en el árbol a partir del nodo raíz,
dirigiéndose de izquierda a derecha de un nodo, según que el valor a insertar sea inferior o
superior al valor del campo clave INFO de este nodo. Cuando se alcanza un nodo del árbol
en que no se puede continuar, el nuevo elemento se engancha a la izquierda o derecha de
este nodo en función de que su valor sea inferior o superior al del nodo alcanzado.

Eliminación de un elemento
La eliminación de un elemento debe conservar el orden de los elementos del árbol. Se
consideran diferentes casos,
según la posición del elemento o nodo en el árbol:
• Si el elemento es una hoja, se suprime simplemente.
• Si el elemento no tiene más que un descendiente, se sustituye entonces por ese
descendiente.
• Si el elemento tiene dos descendientes, se sustituye por el elemento inmediato inferior
situado lo más a la derecha posible de su subárbol izquierdo.
Para poder realizar estas acciones será preciso conocer la siguiente información del nodo
a eliminar:
• Conocer su posición en el árbol.
• Conocer la dirección de su padre.
• Conocer si el nodo a eliminar tiene hijos, si son 1 o 2 hijos, y en el caso de que sólo sea
uno, si es hijo derecho
o izquierdo.
GRAFOS
Los grafos son otra estructura de datos no lineal y que tiene gran número de aplicaciones.
El estudio del análisis de grafos ha interesado a los matemáticos durante siglos y representa
una parte importante de la teoría combinatoria en matemáticas. Aunque la teoría de grafos
es compleja y amplia, en esta sección se realizará una introducción a la teoría de grafos y
a los algoritmos que permiten su solución por computadora. Los árboles binarios
representan estructuras jerárquicas con limitaciones de dos subárboles por cada nodo. Si
se eliminan las restricciones de que cada nodo puede apuntar a dos nodos —como
máximo— y que cada nodo puede estar apuntado por otro nodo —como máximo— nos
encontramos con un grafo.
Los grafos nos pueden ayudar a resolver problemas como éste. Supóngase que ciertas
carreteras del norte del Estado han sido bloqueadas por una reciente tormenta de nieve.
¿Cómo se puede saber si todas las ciudades de ese Estado se pueden alcanzar por
carretera desde la capital o si existen ciudades aisladas? Evidentemente existe la solución
del estudio de un mapa de carreteras; sin embargo, si existen muchas ciudades, la
obtención de la solución puede ser ardua y costosa en tiempo. Una computadora y un
algoritmo adecuado de grafos solucionarán fácilmente el problema.

Terminología de grafos
Formalmente un grafo es un conjunto de puntos —una estructura de datos— y un conjunto
de líneas, cada una de las cuales une un punto a otro. Los puntos se llaman nodos o vértices
del grafo y las líneas se llaman aristas o arcos (edges).
Se representan el conjunto de vértices de un grafo dado G por VG y el conjunto de arcos
por AG. Por ejemplo, en
el grafo G de la Figura 13.23:
VG = {a, b, c, d}
AG = {1, 2, 3, 4, 5, 6, 7, 8}

Un grafo G se denomina sencillo si se cumplen las siguientes condiciones:


• No tiene lazos, no existe un arco en AG de la forma (V, V).
• No existe más que un arco para unir dos nodos, es decir, no existe más que un arco (V1,
V2) para cualquier par
de vértices V1, V2.
Representación de grafos
Existen dos técnicas estándar para representar un grafo G: la matriz de adyacencia
(mediante arrays) y la lista de adyacencia (mediante punteros/listas enlazadas).
Matriz de adyacencia
La matriz de adyacencia M es un array de dos dimensiones que representa las conexiones
entre pares de vértices. Seaun grafo G con un conjunto de nodos VG y un conjunto de
aristas AG. Supongamos que el grafo es de orden N, donde
N >= 1. La matriz de adyacencia M se representa por una matriz de N × N elementos, donde:
M(i, j) = { 1 si existe un arco (Vi, Vj) en AG, Vi es adyacente a Vj 0, en caso contrario Las
columnas y las filas de la matriz representan los vértices del grafo. Si existe una arista desde
i a j (esto es, el vértice i es adyacente a j), se introduce un 1; si no existe la arista, se
introduce un 0; lógicamente, los elementos de la diagonal principal son todos ceros, ya que
el coste de la arista i a i es 0.
Si G es un grafo no dirigido, la matriz es simétrica M(i, j) = M(j, i).

Lista de adyacencia
El segundo método utilizado para representar grafos es útil cuando un grafo tiene muchos
vértices y pocas aristas;mes la lista de adyacencia. En esta representación se utiliza una
lista enlazada por cada vértice v del grafo que tenga vértices adyacentes desde él.
El grafo completo incluye dos partes: un directorio y un conjunto de listas enlazadas. Hay
una entrada en el directorio por cada nodo del grafo. La entrada en el directorio del nodo i
apunta a una lista enlazada que representa los nodos que son conectados al nodo i. Cada
registro de la lista enlazada tiene dos campos: uno es un identificador denodo, otro es un
enlace al siguiente elemento de la lista; la lista enlazada representa arcos.
Recorrido de gráficas dirigidas
En esta sección se presentan los métodos más usados para determinar la existencia o no
existencia de caminos entre los vértices de la gráfica, así como los métodos que obtienen
los caminos de menor longitud entre ellos.

Método Warshall
Este método determina si existe o no un camino de longitud mayor o igual a uno entre los
vértices de una gráfica dirigida. Es decir, el método sólo encuentra si hay un camino directo
o indirecto (por medio de otros vértices intermedios) entre los nodos, sin importar el costo.
Para aplicar este método se requiere generar la cerradura transitiva de la matriz de
adyacencia de la digráfica. La cerradura transitiva es una matriz (CerTran) de NumVer por
NumVer elementos, donde CerTran[i][j]= 1 si existe un camino de i a j, y 0 en caso contrario.

Gráficas no dirigidas
Una gráfica no dirigida o gráfica se caracteriza porque sus aristas son pares no ordenados
de vértices. Por lo tanto, si existe una arista o arco de V1 a V2, ésta será la misma que de
V2 a V1, se grafica sin flecha al final y se expresa como:
a = (V1, V2) = (V2, V1)
Debido a esta característica, las gráficas son muy útiles cuando se tienen datos y relaciones
simétricas entre ellos. Suponga que se quiere representar una red de comunicación entre
servidores, ubicados en diferentes edificios de una misma empresa. Cada uno de los
vértices se corresponderá con cada uno de los servidores, mientras que los arcos
representarán al medio elegido para llevar a cabo la comunicación. Usando una gráfica para
modelar esta situación se estará indicando que, si existe comunicación de un nodo a otro,
entonces también es posible comunicarse de este último al primero. Por otra parte, si la
arista estuviera etiquetada con la velocidad de comunicación del medio empleado, dicha
velocidad sería la misma en cualquiera de los sentidos.
Conclusión

Luego de concluir el siguiente tema, debemos tener en cuenta que un árbol como estructura
de datos nos permite almacenar una cantidad significativa de datos de forma ordenada. Un
árbol se representa con un conjunto de nodos entrelazados entre sí por medio de ramas,
debemos tener en cuenta que el nodo base es único, y se le denomina raíz. En un árbol un
padre puede tener varios hijos, pero un hijo solo puede tener un padre. Desde la raíz se
puede llegar a cualquier nodo progresando por las ramas y atravesando los sucesivos
niveles estableciendo así un camino.
Bibliografía

Guardati Buemo, S., Ocampo Botello, F. y García Cerpas, J., 2007. Estructura de datos orientados a
objetos . México: Pearson Educación.

Joyanes Aguilar, L., y Fundamentos de programación, algoritmos, estructuras de datos y objetos .

You might also like