Está en la página 1de 28

Algoritmo y Estructura de Datos I

Ing. Alberto Moreno C.

Semana 18

Objetivos :

Definicin de rboles Caractersticas de los rboles rboles binarios. Tipo Operaciones Implementacin de un rbol binarios de bsqueda

ESTRUCTURA DE DATOS rboles

DEFINICION DE ARBOL
Los rboles son estructuras de datos jerarquizadas, organizadas y dinmicas: formada por un conjunto de nodos y un conjunto de aristas que conectan pares de nodos. Jerrquica porque los componentes estan a distinto nivel. Organizada porque importa la forma en que este dispuesto el contenido. Dinmica porque su forma, tamao y contenido pueden variar durante la ejecucin.

El primer nodo se le conoce con el nombre de RAIZ

ESTRUCTURA DE DATOS rboles

REPRESENTACION DE UN ARBOL

a b e f c d

RAIZ

E
Representation Textual

F
Representacin Nodal

ESTRUCTURA DE DATOS rboles

CARACTERISTICAS Todo rbol tiene un nico nodo raz. Todo nodo, excepto la raz esta conectado por medio de una arista a un nico nodo, donde existe correspondencia se dice que es nodo padre aquel que antecede y es hijo a aquel nodo que le precede. Hay un nico camino desde la raz a cada nodo. El numero de aristas que atraviesa es la longitud del camino. Todo nodo que no tiene mas ramificaciones se le conoce como nodo terminal u hoja.

ESTRUCTURA DE DATOS rboles

CARACTERISTICAS Padre es el antecesor inmediato de un nodo Hijo, cualquiera de sus descendientes inmediatos. Hermano de un nodo, es otro nodo con el mismo padre. El grado de un nodo cualesquiera, es el numero de descendientes directos que tenga. Grado de un rbol, es el mximo grado de todos los nodos. Nivel, es el nmero de aristas o arcos que deben ser recorridos para llegar a un determinado nodo. Altura, es el mximo nmero de niveles de todos los nodos del rbol.

ESTRUCTURA DE DATOS rboles

CARACTERISTICAS DE LOS RBOLES

A
B C D

raiz hijos

Grado 2 E

H Grado del Arbol 3

hojas Nivel 3

ESTRUCTURA DE DATOS rboles

APLICACIONES DE RBOLES

Representacin de un rbol genealgico. Representacin de operaciones algebraicas. Para realizar la administracin de directorios como para UNIX, DOS, Windows. Crear directorio de ficheros, etc.

ESTRUCTURA DE DATOS rboles

RBOLES BINARIOS Son los rboles cuyo grado es 2 como mximo.

Se dice que es un rbol binario si tiene 0, 1 o 2 hijos

ESTRUCTURA DE DATOS rboles

RECORRIDO DE UN RBOL BINARIO Los rboles binarios se pueden recorrer de la siguiente manera: Pre-Orden (Prefijo) RID - Visitar la raiz - Recorrer el sub-arbol izquierdo. - Recorrer el sub-arbol derecho. In-Orden (Infijo) IRD - Recorrer el sub-arbol izquierdo. - Visitar la raiz. - Recorrer el sub-arbol derecho. Post-Orden (Postfijo) IDR - Recorrer el sub-arbol izquierdo. - Recorrer el sub-arbol derecho. - Visitar la raiz.

ESTRUCTURA DE DATOS rboles

A B

PreOrden (RID): _____________ InOrden (IRD): _____________ PostOrden (IDR): _____________

PreOrden (RID): ABDGCEHIF InOrden (IRD): DGBAHEICF PostOrden (IDR): GDBHIEFCA

ESTRUCTURA DE DATOS rboles

A B

PreOrden (RID): _____________

InOrden (IRD): _____________


PostOrden (IDR): _____________

ESTRUCTURA DE DATOS rboles

RBOLES BINARIOS DE BSQUEDA


Definicin: Un rbol binario de bsqueda tambin llamado rbol ordenado es aquel donde se cumple que nodos menores que la raz van a la izquierda y los que son mayores que la raz van a la derecha.

Los nodos insertados en rboles de bsqueda binarios se insertan como hojas.

ESTRUCTURA DE DATOS rboles

REPRESENTACIN DE UN RBOL ORDENADO

6 4 9 5 1 4

6 9 5

ESTRUCTURA DE DATOS rboles

TIPOS DE RBOLES BINARIOS DE BSQUEDA

RBOLES AVL
Un arbol AVL (Adelson-Velskii & Landis) es un rbol binario de bsqueda en el que la altura de los subrboles izquierdo y derecho difiere como mximo en 1.

MONTCULOS

Un rbol binario es un montculo si es completo, cualquier nodo es mayor que sus sucesores (monton: max), o menor (montn:min). Sirve para implementar colas con prioridad.

ESTRUCTURA DE DATOS rboles

OPERACIONES BSICAS Las operaciones bsicas son: 1. 2. 3. 4. Insercin de un elemento al rbol binario (agregar). Recorrer un rbol binario. Bsqueda de un elemento del rbol binario. Eliminar un elemento del rbol binario.

ESTRUCTURA DE DATOS rboles

INSERCIN DE UN ELEMENTO A UN RBOL (AGREGAR)

Se crea un nuevo elemento Si la raz esta vaca entonces raz ser el nuevo elemento Si la raz tiene datos, comparamos si es menor se va a la izquierda y si es mayor a la derecha siempre y cuando sea una hoja
nuevo raiz null

(d)

nuevo raiz

(b)

raiz

4
raiz

9 6

6
nuevo raiz

(a)

6 (c)
4

4 (e)

ESTRUCTURA DE DATOS rboles

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
1.En el "recorrido en profundidad, tenemos los siguientes mtodos: Pre-Orden (Prefijo) RID In-Orden (Infijo) IRD Post-Orden (Postfijo) IDR

2.

En el "recorrido en anchura", el proceso se realiza horizontalmente desde la raz a todos sus hijos, a continuacin a los hijos de sus hijos y as sucesivamente hasta que todos los nodos han sido procesados.

ESTRUCTURA DE DATOS rboles

BSQUEDA DE UN RBOL BINARIO El proceso de bsqueda se hace recorriendo el rbol: - Si el dato esta en la raz, dato encontrado. - Si el dato no esta en la raz, compara si es menor que la raz. Si es menor buscar en la izquierda, sino buscar en la derecha.
raiz p p

dato= 5
MAYOR

6
4
p

MENOR

1
3

ESTRUCTURA DE DATOS rboles

IMPLEMENTACIN DE UN RBOL BINARIO

6
4 9

izq info

der

1
3

ESTRUCTURA DE DATOS rboles

IMPLEMENTACIN DE LA CLASE ELEMENTO

public class Elemento {

public Elemento der, izq ; public int info ;


public Elemento ( ) { der = null ; izq = null ; info = 0 ; }
null

0
null

ESTRUCTURA DE DATOS rboles

IMPLEMENTACIN DE LA CLASE RBOL

public class Arbol { Elemento raiz ; public Arbol() { raiz = null ; }

raiz
}

null

ESTRUCTURA DE DATOS LISTA Lista de objetos

IMPLEMENTACIN DE LA CLASE RBOL MTODOS PRINCIPALES

public class Arbol { Elemento raiz ; public int tamao (Elemento p) { if(p==null) return 0; else return 1+ tamao(p.izq)+ tamao(p.der); } public int altura (Elemento p) { if(p==null) return -1; else return 1+ Math.max (altura(p.izq), altura(p.der) ) ; } }

ESTRUCTURA DE DATOS rboles


public class Arbol { Elemento raiz ;

INSERTAR (AGREGAR)

public void agregar (int dato) { public Elemento agregar ( Elemento p, int info) { ElementoArbol nuevo, p, q ; if ( p == null ) nuevo = new ElementoArbol ( ) ; p = new Elemento(info) ; nuevo.info = dato ; else if ( raiz == null ) if ( info > p.info ) raiz = nuevo ; p.der=agregar(p.der,info) ; else { else p = q = raiz ; izq=agregar(p.izq,info) ; while (q != null) { return p ; p=q; } if ( nuevo.info < p.info ) q = p.izq ; else q = p.der ; } if ( nuevo.info < p.info ) p.izq = nuevo ; else p.der = nuevo ; Mtodo agregar recursivo } }
}

ESTRUCTURA DE DATOS rboles

IMPLEMENTACIN DE LA CLASE RBOL RECORRER (PROFUNDIDAD)

public class Arbol { Elemento raiz ; public String inOrden ( Elemento p) { if (p != null ) return inOrden(p.izq) + " " + p.info + "\n" + inOrden(p.der) ; return ; } public String preOrden( Elemento p){ if (p != null ) return p.info + "\n"+preOrden(p.izq) + " " + preOrden(p.der) ; return ; } public String postOrden( Elemento p){ if (p != null ) return postOrden(p.izq) + postOrden(p.der)+ p.info + \n ; return ; } }

ESTRUCTURA DE DATOS rboles

IMPLEMENTACIN DE LA CLASE RBOL RECORRER (PROFUNDIDAD)

public class Arbol { Elemento raiz ; public String inOrden ( Elemento p) { if (p != null ) return inOrden(p.izq) + " " + p.info + "\n" + inOrden(p.der) ; return ; } public String preOrden( Elemento p){ if (p != null ) return p.info + "\n"+preOrden(p.izq) + " " + preOrden(p.der) ; return ; } public String postOrden( Elemento p){ if (p != null ) return postOrden(p.izq) + postOrden(p.der)+ p.info + \n ; return ; } }

ESTRUCTURA DE DATOS Archivos

PROCESO DE ESCRITURA Dispositivo de almacenamiento

Aplicacin

(2) Lee los datos de la aplicacin

C:\\test.txt Este es una prueba

(3) Graba

(4) Elimino el objeto


Objeto de RandomAccessFile

(1) Creo el objeto

ESTRUCTURA DE DATOS Archivos

PROCESO DE LECTURA Dispositivo de almacenamiento

Aplicacin (2) Lee los datos de la aplicacin

C:\\test.txt (2) Creo arreglo Este es una prueba

(4) Elimino el objeto


Objeto de RandomAccessFile

(1) Creo el objeto