You are on page 1of 42

TECNOLÓGICO NACIONAL DE MÉXICO

Ingeniería en Sistemas Computacionales


Estructura de Datos
Unidad IV: Estructuras no Lineales
Competencia de la Unidad
• Conocer, identificar y aplicar las estructuras no lineales en la solución de
problemas del mundo real.
Estructuras NO Lineales
• A las estructuras de datos no lineales se les llama también estructuras de datos
multi-enlazadas. Cada elemento o NODO puede estar enlazado a cualquier
otro componentes.
• Se trata de estructuras de datos en las que cada elemento puede tener varios
sucesores y/o varios predecesores.
Árboles
Árboles
Un árbol es una estructura de datos
homogénea, dinámica y no lineal, en la que
cada nodo (elemento) puede tener varios
nodos posteriores, pero sólo puede tener
un nodo anterior.

Un árbol es dinámico porque su estructura


puede cambiar durante la ejecución de un
programa. Y no lineal, ya que cada nodo
del árbol puede contener varios nodos que
dependan de él.
• La estructura de un árbol se forma de nodos y arcos (línea que une dos nodos),
el primero de los nodos del árbol recibe el nombre de raíz, del cual se
desprenden los nodos interiores y de éstos los nodos llamados hoja, que son
los nodos que se encuentran al final del árbol; todos ellos en conjunto forman
un árbol.
• Además de comprender el concepto y la estructura de un árbol, debemos
tomar en cuenta otros conceptos básicos que pueden ser útiles en el
momento de construir o programar un árbol, estos conceptos los
clasificaremos en tres rubros:
 Relación con otros nodos,
 Posición dentro del árbol y
 Tamaño del árbol
En relación con otros nodos:
• Padre: es el nodo del cual se derivan otros nodos.
• Hijo: es el nodo que depende de otro.
• Hermano: es el nodo que se encuentra al lado del nodo hijo y que dependen
del mismo nodo padre.

En cuanto a la posición dentro del árbol:


• Raíz: es el primero de los nodos y el único que no contiene un padre.
• Hoja: es el nodo que se encuentra al final del árbol.
• Interior: nodos con uno o más subárboles; nodos que no son hojas.
En relación a su tamaño:
En relación a su tamaño:
Un árbol binario sería un conjunto de 0 o más nodos en el cual existe un nodo
raíz y cada uno de los nodos, incluido el raíz podrán tener 0, 1 o dos subárboles:

 Subárbol izquierdo y subárbol derecho.


 Cada nodo es como máximo de grado 2.
Terminología:
Árboles similares: árboles con la misma estructura.

Árboles equivalentes: árboles con la misma estructura y contienen la misma


información.

Árboles completos o árboles perfectos: todos los nodos, excepto las hojas,
tienen grado 2. Un árbol binario de altura n tiene 2n-1 nodos.

Árbol equilibrado o balanceado: un árbol en el que las alturas de los dos


subárboles de cada uno de los nodos tiene como máximo una diferencia de una
unidad.

Árbol degenerado: todos sus nodos sólo tienen un subárbol.


•.
TRABAJANDO CON ÁRBOLES BINARIOS

• Un árbol binario es una estructura recursiva. Cada nodo es el raíz de su propio


subárbol y tiene hijos, que son raíces de árboles llamados los subárboles
derecho e izquierdo del nodo, respectivamente. Un árbol binario se divide en
tres subconjuntos disjuntos:
RECORRIDO DE UN ÁRBOL BINARIO
• Para visualizar o consultar los datos almacenados en un árbol se necesita
recorrer el árbol o visitar los nodos del mismo. Al contrario que las listas
enlazadas, los árboles binarios no tienen realmente un primer valor, un
segundo valor, tercer valor, etc. Se puede afirmar que el nodo raíz viene el
primero, pero ¿quién viene a continuación? Existen diferentes métodos de
recorrido de árbol ya que la mayoría de las aplicaciones binarias son bastante
sensibles al orden en el que se visitan los nodos, de forma que será preciso
elegir cuidadosamente el tipo de recorrido.
RECORRIDO PREORDEN
El recorrido preorden conlleva los siguientes pasos, en los que el nodo raíz va
antes que los subárboles:
1. Visitar el nodo raíz (N).
2. Recorrer el subárbol izquierdo (I) en preorden.
3. Recorrer el subárbol derecho (D) en preorden.

• Dado las características recursivas de los árboles, el algoritmo de recorrido


tiene naturaleza recursiva. Primero se procesa la raíz, a continuación el
subárbol izquierdo y a continuación el subárbol derecho.
• Para procesar el subárbol izquierdo se siguen los mismos pasos: raíz, subárbol
izquierdo y subárbol derecho (proceso recursivo).
• Luego se hace lo mismo con el subárbol derecho.
Si utilizamos el recorrido preorden del
árbol de la figura se visita primero el raíz
(nodo A); a continuación, se visita el
subárbol izquierdo de A, que consta de los
nodos B, D y E.

Dado que el subárbol es a su vez un árbol,


se visitan los nodos utilizando el mismo
preorden. Por consiguiente, se visita
primero el nodo B, después D (izquierdo) y
por último E (derecho).

A continuación, se visita subárbol derecho


de A, que es un árbol que contiene los
nodos C, F y G. De nuevo, siguiendo el
mismo preorden, se visita primero el nodo
C, a continuación F (izquierdo) y por último
G (derecho).
• Ejercicio: Realizar el recorrido en
preorden del siguiente árbol
binario.
RECORRIDO ENORDEN

• El recorrido enorden (inorder) procesa primero el subárbol izquierdo, después


el raíz y a continuación el subárbol derecho. El significado de en (in) es que la
raíz se procesa entre los subárboles.

• Si el árbol no está vacío, el método implica los siguientes pasos:

1. Recorrer el subárbol izquierdo (I) en enorden.


2. Visitar el nodo raíz (N).
3. Recorrer el subárbol derecho (D) en enorden.
• En el árbol de la figura ejemplo, los
nodos se han numerado en el orden en
que son visitados durante el recorrido
enorden.
• El primer subárbol recorrido es el
subárbol izquierdo del nodo raíz (árbol
cuyo nodo contiene la letra B). Este
subárbol es, a su vez, otro árbol con el
nodo B como raíz, por lo que siguiendo
el enorden, se visita primero D, a
continuación B (nodo raíz) y por último
E (derecha). Después, se visita el nodo
raíz, A.
• Por último, se visita el subárbol derecho
de A, siguiendo el enorden se visita
primero F, después C (nodo raíz) y por
último G.
• Ejercicio: Realizar el recorrido
enorden del siguiente árbol
binario.
RECORRIDO POSTORDEN
• El recorrido postorden procesa el nodo raíz (post) después de que los
subárboles izquierdo y derecho se han procesado. Se comienza situándose en
la hoja más a la izquierda y se procesa. A continuación se procesa su subárbol
derecho. Por último, se procesa el nodo raíz.

Las etapas del algoritmo, si el árbol no está vacío, son:

1. Recorrer el subárbol izquierdo (I) en postorden.


2. Recorrer el subárbol derecho (D) en postorden.
3. Visitar el nodo raíz (N).
• Si se utiliza el recorrido postorden del
árbol ejemplo se visita primero el
subárbol izquierdo de A. Este subárbol
consta de los nodos B, D y E, y siguiendo
el postorden, se visitará primero D
(izquierdo), luego E (derecho) y, por
último, B (nodo).
• A continuación, se visita el subárbol
derecho de A que consta de los nodos C,
F y G. Siguiendo el postorden para este
árbol, se visita primero F (izquierdo),
después G (derecho) y, por último, C
(nodo).
• Finalmente se visita el nodo raíz A.
• Ejercicio: Realizar el recorrido
postorden del siguiente árbol
binario.
El resultado para los 3 métodos es el siguiente:

Preorden

Enorden

Postorden
ÁRBOLES DESDE LA PROGRAMACIÓN CON MEMORIA DINÁMICA
• Para trabajar un árbol binario desde la programación es necesario crear una
estructura que albergue la información y enlaces de los nodos, esto significa
que nuestro árbol se trabajará por medio de memoria dinámica.

Declaración de estructura y variables tipo nodos:


Lógica del módulo principal:
Módulo recursivo para insertar nodos en el árbol
Recorrido Recursivo en PreOrden:
Recorrido Recursivo en InOrden:
Recorrido Recursivo en PostOrden:
Ejercico:

• Enlazar los módulos vistos en clase en un solo programa y agregar a la rutina


main() el llamado a los recorridos, preOrden, inOrden y postOrden.

• Entregar programa y código ya desarrollados.


Grafos
• Un grafo G agrupa entes físico o conceptuales y las relaciones entre ellos. Por
tanto, un grafo está formado por un conjunto de vértices o nodos V, que
representan a los entes, y un conjunto de arcos A, que representan las
relaciones entre vértices. Se representa con el par G = (V, A).

La figura muestra un grafo G formado por los


vértices V = {1,4,5,7,9} y el conjunto de arcos:
A = {(1, 4), (4, 1), (5, 1), (1, 5), (7, 9),
(9, 7), (7, 5), (5, 7), (4, 9), (9, 4)}
• Un arco o arista representa una relación entre dos nodos. Esta relación, al
estar formada por dos nodos, se representa por (u, v) siendo u, v el par de
nodos.
• El grafo es no dirigido si los arcos están formados por pares de nodos no
ordenados, no apuntados; se representa con un segmento uniendo los
nodos, u ⎯ v.
• Un grafo es dirigido, también denominado digrafo, si los pares de nodos
que forman los arcos son ordenados; se representan con una flecha que
indica la dirección de la relación, u --> v.

El grafo de la sig. figura que consta de los


vértices: V = {C, D, E, F, H}, y de los arcos
A = {(C, D,), (D, F), (E, H), (H, E), (E, C)}
forman el grafo dirigido G = {V, A}
• En los modelos realizados con grafos, a veces, una relación entre dos nodos
tiene asociada una magnitud, denominada factor de peso, en cuyo caso se
dice que es un grafo valorado.
• Por ejemplo: los pueblos que forman una comarca junto a la relación entre un
par de pueblos de estar unidos por un camino: esta relación tiene asociado el
factor de peso, que es la distancia en kilómetros. La figura sig. muestra un
grafo valorado en el que cada arco tiene asociado un peso que es la longitud
entre dos nodos.
Grado de entrada, grado de salida de un nodo

• El grado es una cualidad que se refiere a los nodos de un grafo. En un grafo


no dirigido el grado de un nodo v, grado(v), es el número de arcos que
contiene a v.

• En un grafo dirigido se distingue entre grado de entrada y grado de salida;


grado de entrada de un nodo v, gradent(v), es el número de arcos que llegan
a v; grado de salida de v, gradsal(v), es el número de arcos que salen de v.
Así, en el grafo no dirigido de la figura Comarcas, grado(Lupiana) = 3.
En el grafo dirigido de la figura Letras, gradent(E) = 1 y el gradsal(E) = 2.
Camino
• Un camino P de longitud n desde el vértice v0 a vn en un grafo G, es la
secuencia de n - 1 vértices v0, v1, v2, ..., vn tal que (vi, vi+1) Є A(arcos).
Matemáticamente el camino se representa por P = (v0, v1, v2,..., vn).

En la sig. figura se pueden encontrar


más de un camino; por ejemplo: P1 = (4,
6, 9, 7) es un camino de longitud 3. Otro
de los caminos es P2 = (10, 11), que
tiene de longitud 1.
Por tanto, se puede afirmar que la
longitud del camino es el número de
arcos que lo forman.
Un grafo no dirigido es conexo si existe un camino entre cualquier par de nodos
que forman el grafo. En el caso de un grafo dirigido con esta propiedad se dice
que es fuertemente conexo. Además, un grafo completo es aquél que tiene un
arco para cualquier par de vértices.
Ejercicio: Del siguiente ejemplo de grafo determine sus características de
acuerdo a las definiciones ya vistas:

• Determine el conjunto V;
• Determine los arcos A;
• Determine si es dirigido o no
dirigido
• Determine 3 caminos para
llegar de Badajoz a Gerona y
determine la longitud de cada
camino.
• Determine el grado de los
vértices Madrid, Murcia,
Valladolid, Jaén, y Bilbao.
Bibliografía

• Joyanes, Zahonero. Estructura de Datos en C++. McGraw Hill. Madrid, España.


2007. ISBN: 978-84-481-5645-9.

You might also like