Arboles Binarios Grales AyED 2011

Click here to load reader

  • date post

    17-Jul-2015
  • Category

    Documents

  • view

    38
  • download

    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