Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semana 18
Objetivos :
Definicin de rboles Caractersticas de los rboles rboles binarios. Tipo Operaciones Implementacin de un rbol binarios de bsqueda
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.
REPRESENTACION DE UN ARBOL
a b e f c d
RAIZ
E
Representation Textual
F
Representacin Nodal
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.
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.
A
B C D
raiz hijos
Grado 2 E
hojas Nivel 3
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.
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.
A B
A B
6 4 9 5 1 4
6 9 5
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.
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.
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)
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.
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
6
4 9
izq info
der
1
3
0
null
raiz
}
null
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) ) ; } }
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 } }
}
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 ; } }
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 ; } }
Aplicacin
(3) Graba