Arboles Binarios Grales AyED 2011
date post
17-Jul-2015Category
Documents
view
38download
0
Embed Size (px)
Transcript of Arboles Binarios Grales AyED 2011
Algoritmos y Estructuras de DatosCursada 2011Prof. Catalina Mostaccio Prof. Alejandra SchiavoniFacultad de Informtica - UNLP
rboles Binarios
Algoritmos y Estructuras de Datos
2
AgendaDefinicin Descripcin y terminologa Representaciones Recorridos Tiempo de ejecucin de los recorridos Aplicacin: Arboles de expresinAlgoritmos y Estructuras de Datos 3
rbol Binario: DefinicinUn rbol binario es una coleccin de nodos, tal que:puede estar vaca puede estar formada por un nodo distinguido R, llamado raz y dos sub-rboles T1 y T2, donde la raz de cada subrbol Ti est conectado a R por medio de una arista
Algoritmos y Estructuras de Datos
4
Descripcin y terminologaCada nodo puede tener a lo sumo dos nodos hijos. Cuando un nodo no tiene ningn hijo se denomina hoja. Los nodos que tienen el mismo nodo padre se denominan hermanos.Algoritmos y Estructuras de Datos 5
Descripcin y terminologaConceptos a usar:Camino: desde n1 hasta nk, es una secuencia de nodos n1, n2, .,nk tal que ni es el padre de ni+1, para 1 i < k. La longitud del camino es el nmero de aristas, es decir k-1. Existe un camino de longitud cero desde cada nodo a s mismo. Existe un nico camino desde la raz a cada nodo. Profundidad: de ni es la longitud del nico camino desde la raz hasta ni. La raz tiene profundidad cero.Algoritmos y Estructuras de Datos 6
Descripcin y terminologaGrado de ni es el nmero de hijos del nodo ni . Altura de ni es la longitud del camino ms largo desde ni hasta una hoja. Las hojas tienen altura cero. La altura de un rbol es la altura del nodo raz. Ancestro/Descendiente: si existe un camino desde n1 a n2, se dice que n1 es ancestro de n2 y n2 es descendiente de n1.
Algoritmos y Estructuras de Datos
7
Descripcin y terminologa
rbol binario lleno: Dado un rbol binario T y altura h, diremos que T es lleno si cada nodo interno tiene grado 2 y todas las hojas estn en el mismo nivel (h). Es decir, recursivamente, T es lleno si : 1.- T es un nodo simple ( rbol binario lleno de altura 0), o 2.- T es de altura h y sus sub-rboles son llenos de altura h-1.Algoritmos y Estructuras de Datos 8
Descripcin y terminologarbol binario completo: Dado un rbol binario T y altura h, diremos que T es completo si es lleno de altura h-1 y el nivel h se completa de izquierda a derecha. Cantidad de nodos en un rbol binario lleno: Sea T un rbol binario lleno de altura h, la cantidad de nodos N es (2 h+1 1) Cantidad de nodos en un rbol binario completo: Sea T un rbol binario completo de altura h, la cantidad de nodos N vara entre (2 h ) y (2 h+1 1)Algoritmos y Estructuras de Datos 9
Representacin Hijo Izquierdo - Hijo DerechoCada nodo tiene:
Informacin propia del nodo Referencia a su hijo izquierdo Referencia a su hijo derecho
Puede implementarse a travs de:
Arreglos PunterosAlgoritmos y Estructuras de Datos 10
RepresentacinHijo Izquierdo - Hijo DerechoAA
BB C
C D E
E
D
G
H
G
H
Algoritmos y Estructuras de Datos
11
RecorridosPreorden
Se procesa primero la raz y luego sus hijos, izquierdo y derecho.
Inorden
Se procesa el hijo izquierdo, luego la raz y ltimo el hijo derecho
Postorden
Se procesan primero los hijos, izquierdo y derecho, y luego la raz
Por niveles
Se procesan los nodos teniendo en cuenta sus niveles, primero la raz, luego los hijos, los hijos de stos, etc.
Algoritmos y Estructuras de Datos
12
Recorrido: Recorrido: Preordenpublic void preorden() { imprimir (this.getRaiz().getDato()); if(!this.getHijoIzquierdo().esVacio()){ this.getHijoIzquierdo.preorden(); } if(!this.getHijoDerecho().esVacio()){ this.getHijoDerecho.preorden(); } }
Algoritmos y Estructuras de Datos
13
Recorrido Preorden: Tiempo de Preorden: EjecucinConsiderando un rbol binario lleno y altura h
c T(n) = c + 2 T( (n 1) / 2 ) T(n) es O(n)Algoritmos y Estructuras de Datos
n=1 n >1
14
Recorrido Preorden: Tiempo de Preorden: EjecucinOtra forma: expresando en funcin de la altura
c T(h) = c + 2 T( h 1 ) T(n) es O(n)Algoritmos y Estructuras de Datos
h=0 h >0
15
Recorrido: Recorrido: Por nivelespublic void porNiveles() { Cola q = new Cola(); ArbolBinario arbol; q.encolar(this); while (!q.esVacia()) { arbol = q.desencolar(); imprimir arbol.getRaiz().getDato(); if (!arbol.getHijoIzquierdo().esVacio()){ q.encolar(arbol.getHijoIzquierdo()); if (!arbol.getHijoDerecho().esVacio()){ q.encolar(arbol.getHijoDerecho()); } }Algoritmos y Estructuras de Datos 16
rbol de ExpresinEs un rbol binario asociado a una expresin aritmticaNodos internos representan operadores Nodos externos operandos (hojas) representan
Algoritmos y Estructuras de Datos
17
rbol de ExpresinEjemplo: * e + a b c d18
/ + f
Algoritmos y Estructuras de Datos
rbol de ExpresinRecorriendo el rbol, obtenemos: Inorden: (((a + b) * (c d)) / (e + f)) Preorden: /*+ab-cd+ef Postorden: ab+cd-*ef+/
Algoritmos y Estructuras de Datos
19
Construccin de un rbol de expresinA partir de una:
Expresin postfija Expresin prefija Expresin infija2 3
+ * 4 5
Algoritmos y Estructuras de Datos
20
Construccin de un rbol de expresin a partir de una expresin postfijaAlgoritmo: tomar un carcter de la expresin mientras ( existe carcter ) hacer si es un operando creo un nodo y lo apilo. si es un operador (lo tomo como la raz de los dos ltimos nodos creados) - creo un nodo R, - desapilo y lo pongo como hijo derecho de R - desapilo y lo pongo como hijo izquierdo de R - apilo R. tomo otro carcter fin
Algoritmos y Estructuras de Datos
21
Construccin de un rbol de expresin a partir de una expresin prefijaAlgoritmo: ArbolExpresin (A: ArbolBin, exp: string ) si exp nulo si es un operador nada. - creo un nodo raz R - ArbolExpresin (subArbIzq de R, exp (sin 1 carcter) ) - ArbolExpresin ( subArbDer de R, exp (sin 1 carcter) ) creo un nodo (hoja)
si es un operando
Algoritmos y Estructuras de Datos
22
Construccin de un rbol de expresin a partir de una expresin infijaExpresin infija Se usa una pila y se tiene en cuenta la precedencia de los operadores Expresin postfija Se usa la estrategia anterior rbol de Expresin
2+5*3+1
253*+1+
Algoritmos y Estructuras de Datos
23
-Convertir una exp. infija en rbol de expresin : se debe convertir la exp. infija en postfija y a partir de sta, construir el rbol de expresin.Estrategia del Algoritmo para convertir exp. infija en postfija : a) si es un operando se coloca en la salida. b) si es un operador se maneja una pila segn la prioridad de este operador en relacin al operador de la pila operador con >= prioridad se apila operador con < prioridad se desapila elemento colocndolo en la salida, hasta encontrar uno de menor prioridad (si se encuentra de = prioridad tambin se desapila), luego se apila el operador. c) cuando se llega al final de la expresin, se desapilan todos los elementos llevndolos a la salida, hasta que la pila quede vaca.Algoritmos y Estructuras de Datos 24
- Consideraciones tenidas en cuenta en el Algoritmo:
Prioridad de los operadores de menor a mayor: +y-,*y/ Los ( siempre se apilan como si tuvieran la mayor prioridad y se desapilan slo cuando aparece un ) .
Algoritmos y Estructuras de Datos
25
Algoritmo: tomar un carcter mientras ( existe carcter ) hacer si es un operando se coloca en la salida. si es un operador - ( se apila operador - ) se desapila elemento y se lleva a la salida hasta encontrar (, que se desapila pero no va a la salida. - + , * , - , / Si el operador es de mayor prioridad que el tope se apila si no se desapila elemento y se lleva a la salida hasta encontrar operador con menor y luego se apila el operador. (segn b) de la Estrategia) tomo otro carcter fin se desapilan los elementos y se llevan a la salida hasta que se vace la pila.Algoritmos y Estructuras de Datos 26
Ejercitacinrbol binario de expresinEjercicio 1. Dada la siguiente expresin postfija : I J K + + A B * C - * , dibuje su correspondiente rbol binario de expresin Convierta la expresin ((a + b) + c * (d + e) + f ) * (g + h) en expresin prefija Ejercicio 2. Dada la siguiente expresin prefija : * + I + J K - C * A B , dibuje su correspondiente rbol binario de expresin Convierta la expresin ((a + b) + c * (d + e) + f ) * (g + h) en expresin postfijaAlgoritmos y Estructuras de de Datos Algoritmos y Estructuras Datos 27
rboles Generales
Algoritmos y Estructuras de Datos
28
AgendaDefinicin Descripcin y terminologa Ejemplos Representaciones Recorridos Tiempo de ejecucin de los recorridosAlgoritmos y Estructuras de Datos 29
DefinicinUn rbol es una coleccin de nodos, tal que:puede estar vaca. (rbol vaco) puede estar formada por un nodo distinguido R, llamado raz y un conjunto de rboles T1, T2, .Tk, k0 (subrboles), donde la raz de cada subrbol Ti est conectado a R por medio de una arista
Algoritmos y Estructuras de Datos
30
Descripcin y terminologa
Grado del rbol es el grado del nodo con mayor grado. rbol lleno: Dado un rbol T de grado k y altura h, diremos que T es lleno si cada nodo interno tiene grado k y todas las hojas estn en el mismo nivel (h). Es decir, recursivamente, T es lleno si : 1.- T es un nodo simple ( rbol lleno de altura 0), o 2.- T es de altura h y todos sus sub-rboles son llenos de altura h-1.Algoritmos y Estructuras de Datos 31
Descripcin y terminologa
rbol completo: Dado un rbol T de grado k y altura h, diremos que T es completo si es lleno de altura h-1