Árboles Generalizados (informática) · ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL:...

13
ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE UAB – Ingeniería de Sistemas 1 Árboles Generalizados (informática) Son estructuras de datos no lineales, o también denominadas estructuras multienlazadas. 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. Los árboles establecen una estructura jerárquica entre los objetos. Los árboles genealógicos y los organigramas son ejemplos comunes de árboles. Un árbol A es un conjunto finito de uno o más nodos, tales que: 1. Existe un nodo especial denominado RAIZ (v1) del árbol. 2. Los nodos restantes (v2, v3, …, vn) se dividen en m >= 0 conjuntos disjuntos denominado A1, A2, …, Am, cada uno de los cuales es, a su vez, un árbol. Estos árboles se llaman subárboles del RAIZ. La definición de árbol implica una estructura recursiva. Esto es, la definición del árbol se refiere a otros árboles. Un árbol con ningún nodo es un árbol nulo; no tiene raíz. Un árbol es una colección de elementos llamados nodos, uno de los cuales se distingue del resto como raíz, junto con una relación que impone una estructura jerárquica entre los nodos. Formalmente, un árbol se puede definir de manera recursiva como sigue: Definición: una estructura de árbol con tipo base T es: (i) Bien la estructura vacía. (ii) Un conjunto finito de uno o más nodos, tal que existe un nodo especial, llamado nodo raíz, y donde los restantes nodos están separados en n >= 0 conjuntos disjuntos, cada uno de los cuales es a su vez un árbol (llamados subárboles del nodo raíz). La definición implica que cada nodo del árbol es raíz de algún subárbol contenido en el árbol principal. El índice de un libro es un buen ejemplo de representación en forma de árbol.

Transcript of Árboles Generalizados (informática) · ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL:...

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 1

Árboles Generalizados (informática) Son estructuras de datos no lineales, o también denominadas estructuras

multienlazadas.

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. Los

árboles establecen una estructura jerárquica entre los objetos. Los árboles genealógicos

y los organigramas son ejemplos comunes de árboles.

Un árbol A es un conjunto finito de uno o más nodos, tales que:

1. Existe un nodo especial denominado RAIZ (v1) del árbol.

2. Los nodos restantes (v2, v3, …, vn) se dividen en m >= 0 conjuntos disjuntos

denominado A1, A2, …, Am, cada uno de los cuales es, a su vez, un árbol. Estos

árboles se llaman subárboles del RAIZ.

La definición de árbol implica una estructura recursiva. Esto es, la definición del árbol se

refiere a otros árboles. Un árbol con ningún nodo es un árbol nulo; no tiene raíz.

Un árbol es una colección de elementos llamados nodos, uno de los cuales se distingue

del resto como raíz, junto con una relación que impone una estructura jerárquica entre los nodos. Formalmente, un árbol se puede definir de manera recursiva como sigue:

Definición: una estructura de árbol con tipo base T es:

(i) Bien la estructura vacía.

(ii) Un conjunto finito de uno o más nodos, tal que existe un nodo especial, llamado

nodo raíz, y donde los restantes nodos están separados en n >= 0 conjuntos

disjuntos, cada uno de los cuales es a su vez un árbol (llamados subárboles del nodo raíz).

La definición implica que cada nodo del árbol es raíz de algún subárbol contenido en el

árbol principal. El índice de un libro es un buen ejemplo de representación en forma de

árbol.

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 2

La figura siguiente muestra un árbol en el que se ha rotulado cada nodo con una letra

dentro de un círculo. Esta es una notación típica para dibujar árboles.

Un árbol simple sin ordenar.

En este diagrama, el nodo con la etiqueta 7 tiene dos hijos, el 2 y el 6, y un padre, el 2. La raíz, al inicio, no tiene padre. En ciencias de la computación y en informática, un árbol es un tipo abstracto de datos (TAD) ampliamente usado que imita la estructura jerárquica de un árbol, con un valor en la raíz y subárboles con un nodo padre, representado como un conjunto de nodos enlazados. Una estructura de datos de árbol se puede definir de forma recursiva (localmente) como una colección de nodos (a partir de un nodo raíz), donde cada nodo es una estructura de datos con un valor, junto con una lista de referencias a los nodos (los hijos) , con la condición de que ninguna referencia esté duplicada ni que ningún nodo apunte a la raíz. Alternativamente, un árbol se puede definir de manera abstracta en su conjunto como un árbol ordenado, con un valor asignado a cada nodo. Ambas perspectivas son útiles: mientras que un árbol puede ser analizado matemáticamente, realmente es representado como una estructura de datos en la que se trabaja con cada nodo por separado (en lugar de como una lista de nodos y una lista de

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 3

adyacencia entre nodos, como un grafo). Mirando a un árbol como conjunto, se puede hablar de el nodo padre de un nodo dado, pero en general se habla de una estructura de datos de un nodo dado que sólo contiene la lista de sus hijos sin referencia a su padre (si lo hay).

No es un árbol: Hay dos partes sin conectar (A→B y C→D→E), luego existe más de una raíz.

No es un árbol: En el ciclo 1-2-4-3, el 4 tiene más de un padre.

No es un árbol: En el ciclo B→C→E→D→B, B tiene más de un padre.

No es un árbol: En el ciclo A→A, A es la raíz, pero también tiene un padre.

Cada lista lineal es trivialmente un árbol

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.

TERMINOLOGÍA Y REPRESENTACIÓN DE UN ÁRBOL GENERAL

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. Sea el árbol de la figura:

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 4

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. Es el nodo superior de un árbol.

Nodo, son los vértices o elementos del árbol.

Nodo terminal u hoja es aquel nodo que no contiene ningún subárbol (los nodos

terminales u hojas de la figura anterior son: E, F, K, L, H, I, J). Llamado menos comúnmente nodo externo o terminal): Un nodo sin hijos.

A cada nodo que no es hoja se asocia uno o varios subárboles llamados

descendientes o hijos. De igual forma, cada nodo tiene asociado un antecesor o

ascendiente llamado padre. Un nodo conectado directamente con otro cuando se aleja de la raíz.

Descendiente: Un nodo accesible por descenso repetido de padre a hijo.

Ascendiente: Un nodo accesible por ascenso repetido de hijo a padre.

Antecesores o Ancestrosde un nodo: todos los nodos del árbol en el camino que

va desde la raíz del árbol hasta el nodo específico. Padre: La noción inversa de hijo. Los nodos hijos 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. Son nodos con al menos un hijo. Grado: Número de subárboles de un nodo. Grado de un nodo: es el número de subárboles que tienen como raíz ese nodo

(cuelgan del nodo). Grado de un árbol: grado máximo de los nodos de un árbol. Brazo: La conexión entre un nodo y otro. Camino: Una secuencia de nodos y brazos conectados con un nodo descendiente. Es el enlace

entre dos nodos consecutivos. Es la sucesión de nodos del árbol: n(1), n(2), .. n(k),

tal que n(i) es el padre de n(i+1). Longitud de camino de un árbol: suma de las longitudes de los caminos a todos

sus componentes. Rama es un camino que termina en una hoja Nivel: El nivel de un nodo se define por 1 + (el número de conexiones entre el nodo y la raíz).

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 5

Altura de un nodo: La altura de un nodo es el número de aristas en el camino más largo entre ese nodo y una hoja.

Altura de un árbol: La altura de un árbol es la altura de su nodo raíz. Profundidad: La profundidad de un nodo es el número de aristas desde la raíz del árbol hasta

un nodo. La altura o profundidad de un árbol es el número máximo de nodos de una rama.

Equivale al nivel más alto de los nodos más uno. Bosque: Un bosque es un conjunto de árboles n ≥ 0 disjuntos. Es una colección de dos o más

árboles.

Todos los nodos tienen un solo padre – excepto el nodo raíz – que no tiene padre.

Cada nodo tiene asociado un número de nivel que se determina por la longitud del

camino desde la raíz al nodo específico. Por ejemplo, en el árbol de la figura anterior:

Nivel 0 A

Nivel 1 B, C, D

Nivel 2 E, F, G, H, I, J

Nivel 3 K, L

El peso de un árbol es el número de nodos terminales.

Del árbol de la figura anterior, la altura es 4, y el peso es 7.

Tipo de datos frente a la estructura de datos Hay una distinción entre un árbol como un tipo de datos abstracto y como una estructura concreta de datos, de forma análoga a la distinción entre una lista y lista enlazada. Como tipo de dato, un árbol tiene un valor e hijos, y los hijos son a su vez subárboles; el valor y los hijos de un árbol se interpreta como el valor del nodo raíz y los subárboles de los hijos del nodo raíz. Para permitir que los árboles finitos, hay que, o bien permitir que la lista de los hijos pueda estar vacía, o permitir que los árboles puedan estar vacíos, en cuyo caso la lista de los hijos pueden ser de tamaño fijo (factor de ramificación, especialmente 2 o binario), si se desea. Como una estructura de datos, un árbol vinculado es un grupo de nodos, donde cada nodo tiene un valor y una lista de referencias a otros nodos (sus hijos). Esta estructura de datos realmente define a un grafo dirigido,1 porque puede tener bucles o varias referencias al mismo nodo, del mismo modo que una lista enlazada. Luego también existe el requisito de que no hay dos referencias que apuntan al mismo nodo (que cada nodo tiene como máximo un solo padre, y de hecho todos lo tienen, a excepción de la raíz), y un árbol que viola esto es árbol corrupto. Debido al uso de referencias a los árboles en la estructura de datos de un árbol enlazado, a menudo se habla de árboles en los que implícitamente están siendo representados por referencias al nodo raíz, ya que esto es, normalmente, la forma en la que se aplican realmente. Por ejemplo, en lugar de un árbol vacío, uno puede tener una referencia nula: un árbol nunca está vacío, sino que una referencia a un árbol puede ser nula.

Recursividad De forma recursiva, un árbol como un tipo de datos se define como un valor (de un cierto tipo de datos, posiblemente vacía), junto con una lista de los árboles (posiblemente una lista vacía), los subárboles de sus hijos:

t: v [t[1], ..., t[k]]

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 6

(Un árbol t se compone de un valor v y una lista de otros árboles.) Más elegantemente, a través de la recursión mutua, de los cuales un árbol es uno de los ejemplos más básicos, un árbol se puede definir en términos de un bosque (una lista de árboles), donde un árbol consta de un valor y un bosque (los subárboles de sus hijos):

f: [t[1], ..., t[k]] t: v f

Tengamos en cuenta que esta definición es en términos de valores, y es apropiada en lenguaje funcional (se asume la transparencia referencial); diferentes árboles no tienen conexión, ya que son simplemente listas de valores. Como una estructura de datos, un árbol se define como un nodo (la raíz), que a su vez consta de un valor (de algún tipo de datos, posiblemente vacío), junto con una lista de referencias a otros nodos (lista posiblemente vacía y referencias posiblemente nulas):

n: v [&n[1], ..., &n[k]]

(Un nodo n se compone de un valor v y una lista de referencias a otros nodos.) Esta estructura de datos define un grafo dirigido,1 y para que sea un árbol hay que añadir una condición en su estructura global (en su topología), y esto es que a lo sumo una referencia puede apuntar a cualquier nodo dado (un nodo tiene como máximo un solo padre), y ningún nodo del árbol puede apuntar a la raíz. De hecho, todos los nodos (que no sean la raíz) deben tener exactamente un padre, y la raíz no debe tener ningún padre. De hecho, dada una lista de nodos, y para cada nodo de una lista de referencias a sus hijos, no se puede saber si esta estructura es un árbol o no sin analizar su estructura global, como se define a continuación.

Definiciones

En términos matemáticos, un árbol es cualquier conjunto de puntos, llamados

vértices, y cualquier conjunto de pares de distintos vértices, llamados lados o ramas,

tales que:

1. Hay una secuencia de ramas, llamada paso de cualquier vértice a cualquier

otro vértice.

2. No hay lazos, o sea, que no hay pasos que comiencen en un vértice y puedan volver al mismo vértice.

Llamaremos a un árbol de tal generalidad, un árbol libre.

Los árboles que tienen un vértice o nodo especial, llamado raíz, reciben el nombre

de árboles enraizados. La particularidad del nodo raíz es que no puede ser hijo de

otro nodo.

Un árbol A es un conjunto finito de uno o más nodos tales que :

1. Existe un nodo especialmente designado y denominado RAIZ(v1) del árbol.

2. Los nodos restantes (v2, v3, ..., vn) se dividen en m >= 0 conjuntos disjuntos

denominados A1, A2, ..., Am, cada uno de los cuales es a su vez, un árbol.

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 7

Estos árboles se llaman subárboles del RAIZ. Observar la naturaleza recursiva

de la definición de árbol.

Un árbol es una estructura de datos no lineal. Las estructuras de datos lineales se

caracterizan por que a cada elemento le corresponde no más que un elemento

siguiente. En las estructuras de datos no lineales, como el árbol, un elemento puede

tener diferentes "siguientes elementos", introduciendo una estructura de bifurcación,

también conocidas como estructuras multi enlazadas.

Un árbol es un conjunto finito de elementos no vacío en el cual un elemento se

denomina raíz y los restantes se dividen en m >= 0 subconjuntos separados, cada

uno de los cuales es por sí mismo un árbol. Cada elemento en un árbol se denomina

nodo del árbol.

Un árbol ordenado se define como un árbol en el que los subárboles de cada nodo

forman un conjunto ordenado. En un árbol ordenado podemos hablar del primero,

segundo o último hijo de un nodo particular. El primer hijo de un nodo, en un árbol

ordenado, se denomina con frecuencia el hijo más viejo de este nodo y el último hijo,

se denomina el hijo más joven.

Un árbol desordenado se define como un árbol en el que los subárboles de cada nodo

no guardan orden alguno. No existe forma, en este tipo de árboles, determinar cual

es el primero, segundo o último hijo. La estructura de datos árboles es para mostrar datos jerárquicos.

Usos

Veamos algunos ejemplos donde la estructura de datos árbol puede ser muy útil:

1. Los sistemas de archivos de los sistemas operativos, compuestos por jerarquías

de directorios y archivos. 2. La jerarquía de clases en los lenguajes orientados a objetos.

La jerarquía de países, provincias, departamentos y municipios que organiza al poder

político de una república.

Matemáticamente Visto en su conjunto, una estructura de datos en árbol es un árbol ordenado, generalmente con valores unidos a cada nodo. Concretamente, es (si se requiere que no sea vacío): Un árbol arraigado en dirección contraria a la raíz (un término más estrecho es

una arborescencia), significa: Un grafo dirigido. Cuyo grafo no dirigido subyacente es un árbol (dos vértices están conectados por exactamente

un camino simple). Con una raíz destacada (un vértice se designa como la raíz). Lo que determina la dirección en los brazos (flechas que apuntan fuera de la raíz; dado un brazo,

el nodo desde donde la flecha apunta se llama el padre y el nodo al que apunta se llama el hijo). Junto con:

Una ordenación en los nodos hijos de un nodo dado, y un valor (de algún tipo de datos) en cada nodo.

A menudo, los árboles tienen un factor de ramificación de dos nodos hijo (posiblemente vacíos, por lo tanto, como máximo dos nodos secundarios no vacíos). En estos casos se habla de un árbol binario.

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 8

Permitir árboles vacíos hace algunas definiciones simples un poco más complicadas: un árbol con raíz no debe estar vacío, por lo tanto, si a los árboles vacíos se le asigna la definición anterior, en su lugar se convierte en un árbol vacío, o un árbol arraigado de tal manera que .... Por otro lado, los árboles vacíos se simplifican definiendo un factor de ramificación fijo: con árboles vacíos, un árbol binario es un árbol de tal manera que cada nodo tiene exactamente dos hijos, cada uno de los cuales es un árbol (posiblemente vacío). Los conjuntos de operaciones en un árbol deben incluir la operación de tenedor.

Terminología Un nodo es una estructura que puede contener un valor o condición, o representar una estructura de datos separada (que puede llegar a ser un árbol). Cada nodo en un árbol tiene cero o más nodos hijo, que se disponen debajo de este en el árbol (por convenio, los árboles se dibujan de arriba a abajo). Un nodo que tiene un hijo se llama el nodo padre del hijo (o nodo superior). Todos los nodos tienen al menos un padre. Un nodo interno (también conocido como un nodo inferior o nodo rama) es cualquier nodo de un árbol que tiene nodos secundarios. De manera similar, un nodo externo(también conocido como un nodo exterior, nodo hoja, o nodo terminal) es cualquier nodo que no tiene nodos hijos. El nodo más alto en un árbol se llama el nodo raíz. Dependiendo de la definición, un árbol puede ser obligado a tener un nodo raíz (en cuyo caso ningún árbol estaría vacío), o que se les permita estar vacíos, en cuyo caso no necesariamente tienen un nodo raíz. Siendo el nodo superior, el nodo raíz no tendrá un padre. Es el nodo en el que los algoritmos comienzan, ya que, como estructura de datos que es, sólo se puede pasar de padres a hijos. Tenga en cuenta que algunos algoritmos comienzan en la raíz, pero primero visitan a los nodos hoja (acceden al valor de los nodos hoja), y acceden por último a la raíz (es decir, que acceden por primera vez a los hijos de la raíz, pero sólo acceder al valor de la raíz como último paso). Todos los demás nodos pueden ser accedidos siguiendo los brazos o enlaces. (En la definición formal, cada uno de esos caminos es único.) En los diagramas, el nodo raíz se extrae convencionalmente en la parte superior. En algunos árboles, tales como los montículos, el nodo raíz tiene propiedades especiales. Cada nodo en un árbol puede ser visto como el nodo raíz del subárbol con raíz en ese nodo.

Las rotaciones en árboles binarios son operaciones internas comunes utilizadas para mantener el balance perfecto (o casi perfecto) del árbol binario. Un árbol balanceado permite operaciones en tiempo logarítmico. La altura de un nodo es la longitud de la trayectoria descendente más larga a una hoja desde ese nodo. La altura de la raíz es la altura del árbol. La profundidad de un nodo es la longitud de la trayectoria a su raíz (es decir, su camino hacia la raíz). Esto es necesario comúnmente en la manipulación de diversos árboles auto balanceables (árboles AVL, en particular). El nodo raíz tiene una profundidad cero, los nodos hoja tienen altura cero, y un árbol con un solo nodo (por lo tanto,

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 9

tanto una raíz y una hoja) tienen profundidad y altura cero. Convencionalmente, un árbol vacío (árbol con ningún nodo, si es que están permitidos) tienen profundidad y altura -1. Un subárbol de un árbol T es un árbol que consiste en un nodo en T y todos sus descendientes en T.2

Dibujando árboles Los árboles se dibujan a menudo en el plano. Los árboles ordenados pueden ser representados esencial y únicamente en el plano, y están por lo tanto llamados árboles de plano, de la siguiente manera: si uno fija un orden convencional (por ejemplo, en el sentido de las agujas del reloj), y dispone a los nodos secundarios en ese orden (primer brazo entrante de un padre, a continuación, primer brazo de hijo, etc.), esto produce una incrustación del árbol en el plano. A la inversa, tal incrustación determina un orden de los nodos secundarios. Si uno coloca la raíz en la parte superior (padres por encima de los niños, como en un árbol genealógico) y coloca todos los nodos que están a una distancia dada desde la raíz (en términos de número de aristas: el nivel de un árbol) en una línea horizontal dada, se obtiene un dibujo estándar del árbol. Dado un árbol binario, el primer hijo es el de la izquierda (el nodo de la izquierda), y el segundo hijo está a la derecha (el nodo de la derecha).

Representaciones Hay muchas maneras diferentes para representar árboles; las representaciones más comunes representan a los nodos dinámicamente como registros con punteros a sus hijos, a sus padres, o a ambos, o como elementos de un vector, con relaciones entre ellos determinadas por sus posiciones en este (por ejemplo, un montículo binario). De hecho, un árbol binario puede ser implementado como una lista de listas (una lista donde los valores son listas): la cabeza de una lista (el valor del primer término) es el hijo izquierdo, mientras que la cola (la lista de los términos segundo y siguientes) es el hijo derecho. Esto puede ser modificado para permitir que los valores, como en las listas de expresión simbólica (expresión S), en donde la cabeza (valor de primer término) es el valor del nodo, la cabeza de la cola (valor de segundo término) sea el hijo izquierdo, y la cola de la cola (lista de términos sucesorios) sea el hijo derecho. En general un nodo en un árbol no tendrá punteros a sus padres, pero esta información puede ser incluida (ampliando la estructura de datos para incluir también un puntero al vector) o almacenarse por separado. Alternativamente, los enlaces ascendentes pueden ser incluidos en los datos del nodo hijo, como en un árbol binario enlazado.

Enumeración de nodos

Necesidades

Muchas veces existe la necesidad de:

1. Encontrar un nodo en un árbol, cuando se ignora si existe o no el árbol. 2. Recuperar todos los nodos de un árbol.

Las soluciones a estas necesidades están regidas por la idea de transformar una

estructura de datos que es básicamente no lineal en una lineal. Obviamente esta

linealidad se logra sin alterar la estructura básica del árbol y visitando todos los nodos

del árbol, una sola vez a cada uno, en las formas básicas.

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 10

A continuación siguen las formas básicas de recorrer, navegar o enumerar los nodos de

un árbol, las que veremos a través del siguiente árbol, el que representa

jerárquicamente, por ejemplo, las ciudades donde una empresa tiene sus oficinas.

Enumeraciones Básicas

A Lo Ancho (Breadth First)

Se usa el método Enumeration breadthFirstEnumeration().

En esta navegación se debe utilizar una estructura de datos auxiliar, como ser una lista, para identificar los

nodos que ya han sido visitados.

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 11

En Profundidad (Depth First)

Se usa el método Enumeration depthFirstEnumeration().

En este tipo de navegación no necesito de una estructura de datos auxiliar para navegar el árbol. Toda la

información necesaria esta disponible en los nodos. El dibujo esta muy simplificado, ya que muestra una

travesía a través de hermanos en forma directa, cuando en la realidad no hay un puntero que permite navegar

de hermano a hermano. Lo que ocurre es que para ir al siguiente hermano se debe volver al padre y allí si seguir

al siguiente hermano.

RESUMEN

Un árbol se define como una colección de nodos organizados en forma recursiva. Cuando

hay 0 nodos se dice que el árbol está vacío, en caso contrario el árbol consiste en un

nodo denominado raíz, el cual tiene 0 o más referencias a otros árboles, conocidos como

subárboles. Las raíces de los subárboles se denominan hijos de la raíz, y

consecuentemente la raíz se denomina padre de las raíces de sus subárboles. Una visión

gráfica de esta definición recursiva se muestra en la siguiente figura:

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 12

Los nodos que no poseen hijos se denominan hojas. Dos nodos que tienen el padre en

común se denominan hermanos.

Un camino entre un nodo n1 y un nodo nk está definido como la secuencia de nodos n1,

n2, ..., nk tal que ni es padre de ni+1, 1 <= i < k. El largo del camino es el número de

referencias que componen el camino, que para el ejemplo son k-1. Existe un camino

desde cada nodo del árbol a sí mismo y es de largo 0. Nótese que en un árbol existe un

único camino desde la raíz hasta cualquier otro nodo del árbol. A partir del concepto de

camino se definen los conceptos de ancestro y descendiente: un nodo n es ancestro de

un nodo m si existe un camino desde n a m; un nodo n es descendiente de un nodo m

si existe un camino desde m a n.

Se define la profundidad del nodo nk como el largo del camino entre la raíz del arbol y el

nodo nk. Esto implica que la profundidad de la raíz es siempre 0. La altura de un nodo

nk es el máximo largo de camino desde nk hasta alguna hoja. Esto implica que la altura

de toda hoja es 0. La altura de un árbol es igual a la altura de la raíz, y tiene el mismo

valor que la profundidad de la hoja más profunda. La altura de un árbol vacío se define

como -1.

La siguiente figura muestra un ejemplo de los conceptos previamente descritos:

A es la raíz del árbol.

A es padre de B, C y D.

E y F son hermanos, puesto que ambos son hijos de B.

E, J, K, L, C, P, Q, H, N y O son las hojas del árbol.

El camino desde A a J es único, lo conforman los nodos A-B-F-J y es de largo 3.

D es ancestro de P, y por lo tanto P es descendiente de D.

L no es descendiente de C, puesto que no existe un camino desde C a L.

La profundidad de C es 1, de F es 2 y de Q es 4.

La altura de C es 0, de F es 1 y de D es 3.

La altura del árbol es 4 (largo del camino entre la raíz A y la hoja más profunda,

P o Q).

Los arboles representan las estructuras no lineales y dinámicas de datos más

importantes en computación. Dinámicas porque las estructuras de árbol pueden cambiar

durante la ejecución de un programa. No lineales, puesto que a cada elemento del árbol

pueden seguirle varios elementos.

ASIGNATURA: (TIS-106) Estructuras de Datos II NIVEL: DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas 13

Los arboles pueden ser construidos con estructuras estáticas y dinámicas. Las estáticas

son arreglos, registros y conjuntos, mientras que las dinámicas están representadas por

listas.

La definición de árbol es la siguiente: es una estructura jerárquica aplicada sobre una

colección de elementos u objetos llamados nodos; uno de los cuales es conocido como

raíz. Además se crea una relación o parentesco entre los nodos dando lugar a términos

como padre, hijo, hermano, antecesor, sucesor, ancestro, etc.. Formalmente se define

un árbol de tipo T como una estructura homogénea que es la concatenación de un

elemento de tipo T junto con un número finito de arboles disjuntos, llamados subárboles.

Una forma particular de árbol puede ser la estructura vacía.

La figura siguiente representa a un árbol general.

Se utiliza la recursión para definir un árbol porque representa la forma más apropiada y

porque además es una característica inherente de los mismos.

Los arboles tienen una gran variedad de aplicaciones. Por ejemplo, se pueden utilizar

para representar fórmulas matemáticas, para organizar adecuadamente la

información, para construir un árbol genealógico, para el análisis de circuitos eléctricos

y para numerar los capítulos y secciones de un libro.