Árboles

50

Upload: maria-jose-artavia-jimenez

Post on 08-Dec-2015

3 views

Category:

Documents


0 download

DESCRIPTION

Estructuras de datos no lineales

TRANSCRIPT

Page 1: Árboles
Page 2: Árboles

Estructura no lineal en la que lo datos seorganizan de modo que los elementos deinformación están organizados entre sí a travésde ramas.

Un árbol es una estructura jerárquica cadaelemento tiene un único predecesor y puedetener varios sucesores.

Existe un único camino entre el primer nodo dela estructura y cualquier otro nodo.

Page 3: Árboles

Un árbol consta de un conjuntofinito de elementos, denominadosnodos, y un conjunto finito delíneas dirigidas, denominadasramas, que conectan los nodos.

Page 4: Árboles

El camino es el enlace entre nodos. No existe uncamino entre todos los nodos.

El número de ramas asociado con un nodo es el gradodel nodo. Es el número máximo de hijos que tienen losnodos del árbol.

El nivel de un nodo o longitud del camino es sudistancia o número de enlaces que hay desde el nodohasta la raíz.

La altura o profundidad de un árbol es el nivel de lahoja del camino más largo desde la raíz más uno.

Page 5: Árboles

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

Bosque: colección de árboles

Orden: es el número potencial de hijos quepuede tener cada elemento de árbol.

Page 6: Árboles

Si el árbol no esta vacío, entonces el primer nodo se llama raíz.

A

FEB

C D G H I

raízNivel 0

Nivel 1

Nivel 2Altura: 3

Peso del árbol: 6

Page 7: Árboles

Nodo Padre de un nodo N es aquel que apunta almismo. En un árbol cada nodo sólo puede tenerun padre.

Nodo Hijo de otro nodo A es cualquier nodoapuntado por el nodo A. Un nodo puede tenervarios hijos.

Nodo Raíz es el único del árbol que no tienepadre.

Nodo hermano: son nodos del mismo padre.

Page 8: Árboles

A es el padre de B y C, y a su vez, B es el padre de D.

B y C son los nodos hijos de A y todos los nodos tienen uno o dos hijos.

El nodo raíz es el que se encuentra en la parte superior del árbol: A

B y C son nodos hermanos

Page 9: Árboles

Hojas son todos los nodos que no tienen hijos.

Nodos Interiores son los nodos que no son ni elnodo raíz, ni nodos hoja.

Camino es una secuencia de nodos, en el que dosnodos consecutivos cualesquiera son padre ehijo.

Rama es un camino desde el nodo raíz a unahoja.

Page 10: Árboles

Son hojas los nodos situadosen la parte inferior: D, G, H yF.

Son nodos interiores B, C y E.

A-B-D es un camino, al igualque E-G y C-E-H.

A-C-E-G y AC-F son ramas.

El árbol es de grado dos.

Page 11: Árboles
Page 12: Árboles

Un árbol general sería un árbol en el que cadanodo puede tener un número ilimitado desubárboles.

Un árbol binario sería un conjunto de 0 o másnodos en el cual existe un nodo raíz y cadauno de los nodos, incluido el raíz podrántener 0, 1 o 2 subárboles:

◦ Subárbol izquierdo y subárbol derecho.◦ Cada nodo es como máximo de grado 2.

Page 13: Árboles
Page 14: Árboles

El árbol del ejemplo anterior es un árbolbinario, ya que cada nodo tiene comomáximo dos hijos.

Se debe notar que en cualquier árbol, no sóloen los binarios, si se elimina el nodo raíz, seobtienen dos árboles.

Aquel que colgaba del enlace izquierdo delnodo raíz se denomina subárbol izquierdo yaquel que colgaba del enlace derecho sedenomina subárbol derecho.

Page 15: Árboles

Árboles similares: árboles con la mismaestructura.

Page 16: Árboles

Árboles equivalentes: árboles con la mismaestructura y contienen la misma información.

Page 17: Árboles

Árboles completos o árboles perfectos: todos losnodos tienen dos hijos y todas las hojas están en elmismo nivel. Se denomina completo porque cadanodo, excepto las hojas, tiene el máximo de hijos quepuede tener.

◦ Un árbol binario de nivel n tiene 2n-1 nodos.

Page 18: Árboles

Árbol equilibrado: un árbol en el que las alturasde los dos subárboles de cada uno de los nodostiene como máximo una diferencia de unaunidad.

Page 19: Árboles

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

Page 20: Árboles

Existen algunos tipos especiales de árboles binarios en función de ciertas propiedades.

◦ Árbol binario equilibrado es aquel en el que en todos sus nodos se cumple la siguiente propiedad:

| altura(subárbol_izquierdo) -

altura(subárbol_derecho) | ≤ a 1

Page 21: Árboles

En árboles binarios completos se cumple que en el nivelk hay 2k nodos y que, en total, si la altura es h, entonceshay 2h - 1 nodos.

En el nivel 0 tenemos 20 = 1 nodos, en el nivel 1 tenemos 21 = 2nodos y en el nivel 2 tenemos 22=4 nodos.

En total el árbol es de altura 3 y por tanto contiene 23-1 = 7nodos.

Page 22: Árboles

Al igual que ocurre en el caso de las listas, sepuede implementar un árbol binario medianteestructuras estáticas o mediante estructurasdinámicas. En ambos casos, cada nodo del árbolcontendrá tres valores:

◦ La información de un tipo base dado contenida en elnodo.

◦ Un enlace al hijo derecho (raíz del subárbol derecho)◦ Un enlace al hijo izquierdo (raíz del subárbol

izquierdo)

Page 23: Árboles

Cada nodo debería tener un número indeterminadode enlaces que apunten a cada uno de sus hijos.

Problema ¿cuántos enlaces reservamos?

Se pueden implementar como un array conindicaciones al padre de cada nodo.

Page 24: Árboles

Implementación mediante una lista de hijos

◦ En un índice aparecen todos los nodos

◦ Por cada nodo existe una lista de hijos

Page 25: Árboles

Implementación mediante una lista de listas

◦ Cada nodo apunta a una lista enlazada

◦ En esa lista, cada nodo apunta a un nodo hijo.

Page 26: Árboles

Los árboles generales son más difíciles de implementarque los árboles binarios.

Un árbol general se puede convertir a binario:

a) La raíz del árbol binario será la raíz del árbol general.b) Se enlaza el hijo situado más a la izquierda del nodo

raíz del árbol general como hijo izquierdo del nodoraíz en el árbol binario.

c) Se enlazan todos los hermanos como hijos derechosen el árbol binario.

d) El proceso se repite con cada nodo.

Page 27: Árboles
Page 28: Árboles

Se pueden implementar como un array deelementos del tipo base del árbol.

◦ El primer elemento corresponde al nivel 0 del árbol.◦ Los dos siguientes elemento corresponden al nivel 1 del

árbol.◦ Los cuatro siguientes elementos corresponden al nivel 2

del árbol.◦ Los ocho siguientes elementos corresponden al nivel 3

del árbol.◦ Los dieciséis siguientes elementos corresponden al nivel

4 del árbol.◦ …

Page 29: Árboles
Page 30: Árboles

Se puede implementar como un array de nodos

Page 31: Árboles

Mediante estructuras dinámicas.

◦ El árbol estaría compuesto por una serie de nodos.

◦ Cada nodo contendría:

El campo raíz con la información del tipo base del árbol.

Los punteros hizq e hder que serían punteros a nodo, es decir, serían también árboles.

Si alguno se esos hijos es un árbol vacío contendrían un valor nulo.

◦ El tipo de dato árbol sería un puntero a nodo.

◦ Un puntero a nodo indicaría el nodo de inicio de la estructura, es decir, la raíz del árbol.

Page 32: Árboles
Page 33: Árboles

En una estructura de datos lineal sólo es posibleun tipo de recorrido en dos sentidos distintos:

◦ Del primero al último o del último al primero.

Una estructura de datos no lineal se puederecorrer de distintas maneras:

◦ ¿Se realiza un recorrido por niveles, accediendo a losnodos hermanos de cada nivel?

◦ Una vez situados en un nodo, ¿a qué hijo se accedeprimero?

◦ En que momento se accede a la información del nodo,¿antes o después de los hijos?

Page 34: Árboles

Recorrer un árbol consiste en acceder una sola vez a todos sus nodos.

En general existen dos grandes grupos derecorridos:

◦ Recorridos en profundidad.

Se recorren las ramas de un nodo dado.

◦ Recorridos en anchura.

Se accede a los nodos hermanos en cada uno de losniveles del árbol.

Page 35: Árboles

Tres tipos de recorridos dependiendo del orden enque se acceda al subárbol izquierdo, al subárbolderecho o al nodo raíz.

En los tres recorridos se accede antes al hijoizquierdo que al hijo derecho.

La variación reside en el momento en que se recorrerála información del nodo.

◦ Recorrido preorden u orden previo (RID, raíz-hijoizquierdo-hijo derecho).

◦ Recorrido inorden u orden simétrico (IRD, hijo izquierdo-raíz-hijo derecho).

◦ Recorrido postorden u orden posterior (IDR, hijo izquierdo-hijo derecho-raíz).

Page 36: Árboles

Recorrido preorden.

Por cada elemento no vacío:◦ Se accede primero al nodo raíz.

◦ Se accede al hijo izquierdo en preorden.

◦ Se accede al hijo derecho en preorden.

M,F,C,A,E,H,P,R,Q,Z

Page 37: Árboles

Recorrido inorden.

Por cada elemento no vacío:

◦ Se accede al hijo izquierdo en inorden.

◦ Se accede al nodo raíz.

◦ Se accede al hijo derecho en inorden.

A,C,E,F,H,M,P,Q,R,Z

Page 38: Árboles

Recorrido postorden.

Por cada elemento no vacío:

◦ Se accede al hijo izquierdo en postorden.

◦ Se accede al hijo derecho en postorden.

◦ Se accede al nodo raíz.

A,E,C,H,F,Q,Z,R,P,M

Page 39: Árboles

El recorrido se hace por niveles a partir delnivel 0.

◦ Por cada nivel se recorren los nodos hermanos deizquierda a derecha.

M F P C H R A E Q Z

Page 40: Árboles

Para su implementación hay que procesar el nodo raíz yrecordar las direcciones de sus hijos izquierdo y derechopara acceder a ellos en el mismo orden en que seencuentran.

Hay que repetir el proceso por cada nodo, recordando lasdirecciones de sus hijos izquierdo y derecho yrecuperarlas en el mismo orden en que han entrado.

Existe una estructura de datos que extrae los elementosen el mismo orden en que entran: la cola.

◦ Se utiliza una cola que almacene árboles (punteros a nodos).◦ Se introduce la dirección del nodo raíz en la cola.◦ Se extraen elementos de la cola y por cada elemento que se

extrae que no sea un árbol vacío (un puntero nulo), se introducenlas direcciones de sus hijos izquierdo y derecho.

◦ El proceso termina cuando la cola esté vacía.

Page 41: Árboles

Un árbol binario de búsqueda es una estructurade datos de tipo árbol binario en el que paratodos sus nodos, el hijo izquierdo, si existe,contiene un valor menor que el nodo padre y elhijo derecho, si existe, contiene un valor mayorque el del nodo padre.

Los nodos están ordenados de maneraconveniente para la búsqueda.

Page 42: Árboles

Dada la siguiente lista: M D P V C A F R Y N S, el árbol de búsqueda resultante sería:

Obsérvese que:

El recorrido inorden del árbol devolvería los elementos en orden ascendente.

Para buscar un elemento hay que compararlo con el que ocupa la raíz del árbol:

1. Si es igual, lo hemos encontrado.2. Si es menor, se busca en el subárbol

izquierdo.3. Si es mayor, se busca en el subárbol

derecho.

Page 43: Árboles

Admite una definición recursiva:

Casos base:◦ Si el árbol es nulo, el elemento no está.◦ Si se trata del elemento raíz, el elemento ya se ha encontrado.

Casos generales:◦ Si el elemento es menor que el raíz hay que hacer la búsqueda en

el subárbol izquierdo (llamada recursiva).◦ Si el elemento es mayor, hay que hacer la búsqueda en el

subárbol derecho (llamada recursiva).

La función de búsqueda devolverá un árbol, es decir unpuntero a nodo.

Si el elemento está en el árbol, será la dirección del nododónde se encuentra el elemento buscado.

Si el elemento no está en el árbol, devolverá un puntero nulo.

Page 44: Árboles

En un árbol binario de búsqueda, todos los elementosse insertan como hojas.

La operación de inserción de un nuevo nodo en un árbol binario de búsqueda consta de tres fases básicas:

1. Creación del nuevo nodo

2. Búsqueda de su posición correspondiente en el árbol.Se trata de encontrar la posición que le correspondepara que el árbol resultante siga siendo de búsqueda.

3. Inserción en la posición encontrado. Se modifican demodo adecuado los enlaces de la estructura.

Page 45: Árboles
Page 46: Árboles

Existen cuatro distintos escenarios:

1. Intentar eliminar un nodo que no existe.– No se hace nada, simplemente se regresa FALSE.

2. Eliminar un nodo hoja.– Caso sencillo: se borra el nodo y se actualiza el apuntador del nodo

padre a NULL.

3. Eliminar un nodo con un solo hijo.– Caso sencillo; el nodo hijo se convierte en el padre.

4. Eliminar un nodo con dos hijos.– Caso complejo, es necesario mover más de una referencia.– Se busca el máximo de la rama izquierda o el mínimo de la ramaderecha.

Page 47: Árboles

6

2 8

3

1 4

6

2 8

3

1 4

Eliminar nodo hojaEliminar 3

Eliminar nodo con un hijoEliminar 4

Page 48: Árboles

6

2 8

3

1 4

5

6

3 8

3

1 4

5

eliminar

copiar

valor

Eliminar nodo con dos hijos

Eliminar 2

Remplazar el dato del nodo que se desea eliminar con el dato del nodo más pequeño del subárbol derechoDespués, eliminar el nodo más pequeño del subárbol derecho (caso fácil)

Page 49: Árboles

6

2 8

3

1 4

5

3.5

Eliminar nodo con dos hijosEliminar 2

6

3 8

3

1 4

5

3.5

Page 50: Árboles