5._Arboles_2012

115
PROGRAMACION II - 2010 Arboles

Transcript of 5._Arboles_2012

Page 1: 5._Arboles_2012

PROGRAMACION II - 2010

Arboles

Page 2: 5._Arboles_2012

ARBOLES

� Definición formal:

conjunto finito T de uno o más nodos tales que:• a) existe un nodo especialmente designado,

llamado raíz del árbol, raíz(T); y

Programación II, Universidad Católica del Uruguay 22012

llamado raíz del árbol, raíz(T); y

• b) Los restantes nodos (excluyendo la raíz), están distribuídos en m >= 0 conjuntos disjuntos T1,.. ,Tm, y cada uno de estos conjuntos es, a su vez, un árbol. Los árboles T1,.. ,Tm son llamados “subárboles” de la raíz.

Page 3: 5._Arboles_2012

Un árbol visto recursivamente

Raíz

Programación II, Universidad Católica del Uruguay 32012

Page 4: 5._Arboles_2012

ARBOLES

� Otra definición formal y recursiva: Una estructura de árbol, con tipo base T, es• La estructura vacía o

• Un nodo del tipo T con un número finito de estructuras arborescentes disjuntas asociadas, del tipo base T, llamadas “subárboles”

Programación II, Universidad Católica del Uruguay 42012

llamadas “subárboles”

� De acuerdo a esta definición, similar a la correspondiente para listas, puede verse que éstas son un caso particular de los árboles.

Page 5: 5._Arboles_2012

¿qué es un Arbol?

� En ciencias de la computación, un árbol es un modelo abstracto de una estructura jerárquica

� Un árbol consiste de nodos con una relación padre-hijo

Computadoras UCU

Ventas I&DProducción

Programación II, Universidad Católica del Uruguay 52012

� Aplicaciones:

• Organigramas

• Sistemas de archivos

• Entornos de programación

Laptops DesktopsUy Internacional

Europa Asia América

Page 6: 5._Arboles_2012

Terminología de árboles genéricos

� Grado: número de subárboles de un nodo.

� Nodo terminal y nodo interno: nodo terminal es el que tiene grado cero, también llamado “hoja”. Un nodo interno es aquél que no es terminal.

Programación II, Universidad Católica del Uruguay 62012

terminal.

� Nivel de un nodo respecto a la raíz: la raíz tiene nivel 0, y otros nodos tienen un nivel que es superior en uno al que tiene con respecto al subárbol Tj, de la raíz, que los contiene.

Page 7: 5._Arboles_2012

Terminología de Arboles

� Raíz: nodo sin padre (A)

� Nodo interno: nodo con por lo menos un hijo (A, B, C, F)

� Nodo externo (hoja): nodo sin hijos(E, I, J, K, G, H, D)

� Ancestros de un nodo: padre, abuelo,

A

� Subárbol : árbol que consiste en un nodo y sus descendientes

Programación II, Universidad Católica del Uruguay 72012

subárbol

� Ancestros de un nodo: padre, abuelo, bisabuelo, etc...

� Nivel o Profundidad de un nodo: número de ancestros

� Altura de un árbol: máxima profundidad de un nodo(3)

� Descendiente de un nodo: hijo, nieto, bisnieto, etc.

B DC

G HE F

I J K

Page 8: 5._Arboles_2012

ARBOLES

G GNivel 3

Programación II, Universidad Católica del Uruguay 82012

A

C

D E F

B

A

C

EFD

BNivel 1

Nivel 2

Nivel 0

Page 9: 5._Arboles_2012

Altura y profundidad o nivel

Nodo Altura Nivel

Programación II, Universidad Católica del Uruguay 92012

Page 10: 5._Arboles_2012

ARBOLES

� Representación :• La raíz arriba, las hojas abajo.

• Se dice que cada raíz es el “padre” de las raíces de sus subárboles, los cuales son llamados “hermanos”.

Programación II, Universidad Católica del Uruguay 102012

“hermanos”.

• Los subárboles son llamados “hijos” de su “padre”.

• La raíz del árbol total no tiene padre.

• Ancestros y descendientes.

Arbolesbinarios

Page 11: 5._Arboles_2012

Recorridos de los árboles genéricos

� Un recorrido visita los nodos del árbol de una forma sistemática

� Los recorridos u ordenamientos se definen recursivamente como sigue:• Si un árbol A es nulo, entonces el listado de los nodos de A en

preorden, inorden o postorden, es la lista vacía.

Programación II, Universidad Católica del Uruguay 112012

preorden, inorden o postorden, es la lista vacía.

• Si A contiene un sólo nodo, entonces ese nodo constituye el listado en los tres órdenes.

A1 A2 Ak

n

...

Page 12: 5._Arboles_2012

Recorridos de Arboles genéricos

� Preorden : Raíz de A, seguido de los nodos de A1 en preorden, luego los de A2 en preorden, etc.

� Inorden : Nodos de A1 en inorden, luego la raíz, luego los nodos de los restantes

Programación II, Universidad Católica del Uruguay 122012

raíz, luego los nodos de los restantes subárboles en inorden.

� Postorden: Nodos de A1 en postorden, luego los de A2 en postorden, hasta el final, y luego la raíz.

Page 13: 5._Arboles_2012

Recorrida en Preorden

� En un recorrido en preorden, un nodo es visitado antes que sus descendientes

� Aplicación: imprimir un documento estructurado

Algoritmo preOrden(v)visitar(v)Para cada hijo w de v

preorden(w)

Programación II, Universidad Católica del Uruguay 132012

documento estructurado

Informe TDAArbol

1. Introducción Casos2. Métodos

2.1 Insertar 2.2 Buscar1.1 General 1.2 Aplicación 2.3 Eliminar

1

2

3

5

46 7 8

9

Page 14: 5._Arboles_2012

Recorrida en Postorden

� En un recorrido en postorden, un nodo es visitado después de sus descendentes

� Aplicación: calcular el espacio usado por archivos en un directorio y sus subdirectorios

Algoritmo postOrden(v)Para cada hijo w of v

postOrden(w)visitar(v)

Programación II, Universidad Católica del Uruguay 142012

subdirectorios

p2/

trabajos/todo.txt1K

programas/

DDR.java10K

Stocks.java25K

h1c.doc3K

h1nc.doc2K

Robot.java20K

9

3

1

7

2 4 5 6

8

Page 15: 5._Arboles_2012

El TDA ARBOL. Operaciones a ser consideradas

� Padre(unNodo).

� HijoIzquierdo(unNodo).

� HermanoDerecho(unNodo).

� Etiqueta(unNodo).

Programación II, Universidad Católica del Uruguay 152012

� Raiz.

� Anula.

� Otros??. (p.ej. Altura)

Page 16: 5._Arboles_2012

Arboles Binarios

� Un Arbol Binario es un Arbol con las siguientes propiedades:• Cada nodo interno tiene como máximo

dos hijos (exactamente dos paraárboles binarios completos)

• Los hijos de un nodo son un par ordenado

� Los hijos de un nodo interno se denominan Hijo Izquierdo e Hijo

� Applicaciones:• Expresiones aritméticas

• Procesos de decisión

• Búsqueda

A

Programación II, Universidad Católica del Uruguay 162012

denominan Hijo Izquierdo e HijoDerecho

� Definiciones alternativas:• Un árbol con un sólo nodo, o un árbol

cuya raíz tiene un par ordenado de hijos, cada uno de los cuales es a suvez un árbol binario

• Conjunto finito de nodos, que puede estar vacío o consistir de una raíz y dos árboles binarios disjuntos, llamados subárbol izquierdo y derecho de la raíz.

B C

F GD E

H I

Page 17: 5._Arboles_2012

Arbol de Expresión Aritmética

� Arbol binario asociado con una expresión aritmética:• Nodos internos: operadores

• Nodos externos: operandos

� Ejemplo: árbol de expresión aritmética para la expresión (2 ×××× (a −−−− 1) ++++ (3 ×××× b))

Programación II, Universidad Católica del Uruguay 172012

+

××

−2

a 1

3 b

Page 18: 5._Arboles_2012

Aplicación de Arbol Binario: Arbol de Decisión

� Arbol binario asociado con un proceso de decisión

• Nodos internos : preguntas con respuestas si / no

• Nodos externos : decisiones

� Ejemplo: decisión de cena

Programación II, Universidad Católica del Uruguay 182012

¿comida rápida?

¿qué tal un café? ¿cuentas de gastos?

Starbucks La Pasiva La Vaca Nuevo García

Si No

Si No Si No

Page 19: 5._Arboles_2012

Recorrido en Inorden de un árbol binario

� En un recorrido en inorden el nodo es visitado después que su subárbol izquierdo y antes que su subárbol derecho

Algoritmo inOrden(v)Si tieneHijoIzquierdo(v)

inOrden (HijoIzquierdo (v))visitar(v)Si tieneHijoDerecho(v)

Programación II, Universidad Católica del Uruguay 192012

Si tieneHijoDerecho(v)inOrden (HijoDerecho(v))

3

1

2

5

6

7 9

8

4

Page 20: 5._Arboles_2012

Impresión de expresiones aritméticas

� Especialización del recorrido en inorden

• Imprimir el operando u operador al visitar el nodo

• Imprimir “(“ antes de recorrer el subárbol izquierdo

• Imprimir “)“ después de recorrer el subárbol derecho

Algoritmo printExpression(v)Si tieneHijoIzquierdo (v)

imprimir (“(’’)printExpression(HijoIzquierdo(v))

imprimir (v.element())

Programación II, Universidad Católica del Uruguay 202012

Imprimir “)“ después de recorrer el subárbol derecho

imprimir (v.element())Si tieneHijoDerecho (v)

printExpression(HijoDerecho(v))print (“)’’)

+

××

−2

a 1

3 b((2 × (a − 1)) + (3 × b))

Page 21: 5._Arboles_2012

Evaluar expresiones aritméticas

� Especialización del recorrido en postorden

• Método recursivo que retorna el valor de un subárbol

• Al visitar un nodo interno, combinalos valores de los subarboles

Algoritmo evalExpr(v)Si esHoja(v)

devolverv.element ()sino

x ← evalExpr(HijoIzquierdo (v))y ← evalExpr(HijoDerecho(v))

Programación II, Universidad Católica del Uruguay 212012

y ← evalExpr(HijoDerecho(v))◊← operador contenido en vdevolverx ◊ y+

××

−2

5 1

3 2

Page 22: 5._Arboles_2012

Ejercicios Arboles Binarios

� Defina árbol binario. Dé un ejemplo de organización usando esta estructura.

� Represente la siguiente expresión aritmética utilizando un árbol binario:

a - (b * (c + d / (f + g)) + h * (i - j * (k + l)))

y dé un algoritmo para, utilizando este árbol, evaluar la expresión cuando las variables toman valores.

Programación II, Universidad Católica del Uruguay 222012

expresión cuando las variables toman valores.

� El recorrido en preorden de un cierto árbol binario produce

ADFGHKLPQRWZ

y el recorrido en inorden produce

GFHKDLAWRQPZ

Dibuje el árbol binario correspondiente.

Page 23: 5._Arboles_2012

Ejercicios Arboles Binarios

Sean p(x), s(x) e i(x) las posiciones del nodo x en preorden, postorden e inorden respectivamente. •Marque en el cuadro siguiente las posiciones que pu eden ser ciertas simultáneamente.

i(n) < i(m) s(n) < s(m) p(n) < p(m)

n es ancestro de m

Programación II, Universidad Católica del Uruguay 232012

n es ancestro de m

n es descendiente de m

n está a la izquierda de m

n está a la derecha de m

Page 24: 5._Arboles_2012

Ejercicios Arboles Binarios

� Escriba un algoritmo para contar las hojas de un árbol binario

� Dado un árbol binario de elementos de tipo entero, escriba un algoritmo que calcule la suma de todos los elementos.

Programación II, Universidad Católica del Uruguay 242012

suma de todos los elementos.

� Escribir un algoritmo que determine la cantidad de nodos que se encuentran en un árbol binario en un nivel n

Page 25: 5._Arboles_2012

ARBOL BINARIO DE BUSQUEDA

� Se dice que un árbol binario es de búsqueda si está organizado de forma que:• para cada nodo t

i todas las claves del subárbol

izquierdo de ti son menores que la clave de t

i y

Programación II, Universidad Católica del Uruguay 252012

izquierdo de ti son menores que la clave de t

i y

todas las claves del árbol derecho son mayores.

� Si el árbol tiene n nodos y está balanceado, su altura será de log(n)

� Una búsqueda en este caso puede tomar log(n) comparaciones o menos.

Page 26: 5._Arboles_2012

ARBOL BINARIO DE BUSQUEDA

TDAArbolBinario

Raiz : ElementoArbolBinarioPrimitivas

Buscar (unaEtiqueta) : ElementoArbolBinario .......ArbolBinario.Buscar(unaEtiqueta)

Programación II, Universidad Católica del Uruguay 262012

ArbolBinario.Buscar(unaEtiqueta)COM

resultado = nulosi Raiz <> nulo ENTONCES

resultado = Raiz.Buscar(unaEtiqueta)Devolver resultado

FIN

Page 27: 5._Arboles_2012

ARBOL BINARIO DE BUSQUEDA

TDA ElementoArbolBinario

Etiqueta : TipoEtiqueta

HijoIzquierdo,HijoDerecho : ElementoArbolBinario

Operaciones

Programación II, Universidad Católica del Uruguay 272012

Operaciones

Insertar(unElementoArbolBinario)

Buscar(unaEtiqueta)

Eliminar(unaEtiqueta)...

Page 28: 5._Arboles_2012

ARBOL BINARIO DE BUSQUEDA

ElementoArbolBinario.Buscar(unaEtiqueta) : ElementoArbolBinario

COMRESULTADO = nuloSI unaEtiqueta = Etiqueta ENTONCES RESULTADO = THIS

SINOSI unaEtiqueta < Etiqueta ENTONCES

SI HijoIzquierdo <> nulo ENTONCES RESULTADO = HijoIzquierdo.Buscar(unaEtiqueta)

Programación II, Universidad Católica del Uruguay 282012

RESULTADO = HijoIzquierdo.Buscar(unaEtiqueta)FINSI

SINO SI HijoDerecho <> nulo ENTONCES

RESULTADO = HijoDerecho.Buscar(unaEtiqueta) FINSI

FINSIFINSIdevolver RESULTADOFIN

Page 29: 5._Arboles_2012

Búsqueda e Inserción en árboles binarios

ArbolBinario.Insertar(unElementoArbolBinario)COMSI Raiz = nulo ENTONCES

Raiz = unElementoArbolBinarioSINO

Programación II, Universidad Católica del Uruguay 292012

SINORaiz.Insertar(unElementoArbolBinario)

FIN

Page 30: 5._Arboles_2012

Búsqueda e Inserción en árboles binarios

ElementoArbolBinario.Insertar(UnNodoArbolBinario);COMSI Etiqueta = unElementoArbolBinario.Etiqueta ENTONCES

SALIR // ya está en el árbolFINSI SI unElementoArbolBinario.Etiqueta < Etiqueta ENTONCES

SI HijoIzquierdo = nulo ENTONCES

Programación II, Universidad Católica del Uruguay 302012

SI HijoIzquierdo = nulo ENTONCES HijoIzquierdo �UnNodoArbolBinario

SINO HijoIzquierdo.Insertar(UnNodoArbolBinario)FINSI

SINO SI HijoDerecho = nulo ENTONCES

HijoDerecho �unElementoArbolBinarioSINO HijoDerecho.Insertar(unElementoArbolBinario)FINSI

FINSIFIN

Page 31: 5._Arboles_2012

Búsqueda e Inserción en árboles binarios

Jorge

. .

Ana

. .

Walter

Pedro

. .

María

Norma

Pablo

Programación II, Universidad Católica del Uruguay 312012

Ana

. .Walter

. .María

. .Pablo

. .

TDATPalabra

clave stringcuenta integerizquierdo, derecho: TPalabra

CrearArbolAbrirArchivoMIENTRAS NO FIN ARCHIVO HACER

LEER (archivo, palabra);Arbol.Insertar(palabra);

end;

Page 32: 5._Arboles_2012

Ejemplo: árbol lexicográfico

� Indice de referencias cruzadas.

procedure Busca (var LaPalabra: PPalabra);varpalabra: PPalabra; LaLinea:PLínea;

beginpalabra := LaPalabra;if p1 = nil thenbegin

new (palabra); new (linea)

type

PLinea = ^TLinea;TLinea = record

linea : word ;Proximo: PLinea;

Programación II, Universidad Católica del Uruguay 322012

new (palabra); new (linea)with palabra^ do

beginclave := PalabraActual; izquierdo := nil ; derecho := nil ;primero := LaLinea; ultimo := LaLinea;

end ;LaLinea^.linea := LineaActual;LaLinea^.Proximo := nil ; LaPalabra := palabra;

end elseif PalabraActual < palabra^.clave then Busca(palabra^.izquierdo)

else if PalabraActual > palabra^.clave then Busca(palabra^.derecho) else

beginnew (LaLinea); LaLinea^.linea := LineaActual;LaLinea^.Proximo := nil ; palabra^.ultimo^.Proximo := LaLinea;palabra^.ultimo := LaLinea

end;end ;

Proximo: PLinea;end ;

PPalabra = ^TPalabra;TPalabra = record

clave: string ;

primero, ultimo: PLinea;izquierdo,

derecho: PPalabra;end ;

varLineaActual: word;PalabraActual: string;

Page 33: 5._Arboles_2012

Búsqueda y eliminación en árboles binario de búsqueda

•Se busca el nodo con la etiqueta a eliminar.•Si no existe un nodo con esa etiqueta, la eliminación es infructuosa.•Si existe y es una hoja, se elimina el nodo directamente.•Si no es una hoja, pero le falta alguno de sus dos sub

Programación II, Universidad Católica del Uruguay 332012 Programación II, Universidad Católica del Uruguay 332009

•Si no es una hoja, pero le falta alguno de sus dos sub árboles, la operación es sencilla, ya que basta con una reasignación de referencias.•Si el nodo a eliminar es un nodo interno completo, deben sustituirse sus datos y etiqueta por el los del nodo de mayor etiqueta de su sub árbol izquierdo (su “inmediato anterior” en el orden lexicográfico dado ).•Luego se elimina ese elemento, que será una hoja, o le faltará el sub árbol derecho.

Page 34: 5._Arboles_2012

ELIMINACION EN ARBOL BINARIO DE BUSQUEDA

10

18

15

138

5

3

10

18

15

8

5

3

Programación II, Universidad Católica del Uruguay 342012

10

18

8

5

3

10

18

8

3

8

183

(a)

(c) (d) (e)

(b)

Page 35: 5._Arboles_2012

eliminación

Programación II, Universidad Católica del Uruguay 352012

Page 36: 5._Arboles_2012

Eliminación

� Eliminación del nodo 5 con 1 hijo: (a) antes y (b) después

Programación II, Universidad Católica del Uruguay 362012

Page 37: 5._Arboles_2012

Eliminación

� Eliminación del nodo 2 con dos hijos: (a) antes y (b) después

Programación II, Universidad Católica del Uruguay 372012

Page 38: 5._Arboles_2012

Eliminación en árbol binario de búsqueda� ArbolBinario.Min

� COM� RESULTADO = nulo� SI Raiz <> nulo RESULTADO = Raiz.encontrarMin� devolver RESULTADO� FIN

� Arbolbin.Max

� COM

� RESULTADO = nulo� SI Raiz <> nulo RESULTADO = Raiz.encontrarMax

Programación II, Universidad Católica del Uruguay 382012

� SI Raiz <> nulo RESULTADO = Raiz.encontrarMax� devolver RESULTADO� FIN

� NodoArbolBinario.encontrarMin� COM� RESULTADO = THIS� SI HijoIzq <> nulo RESULTADO = HijoIzq.encontrarMin� devolver RESULTADO� FIN� NodoArbolBinario.encontrarMax� COM� RESULTADO = THIS� SI HijoDer <> nulo RESULTADO = HijoDer.encontrarMax� devolver RESULTADO� FIN

Page 39: 5._Arboles_2012

Búsqueda y eliminación en árboles binarios de búsqueda

ArbolBinario.Eliminar(UnaEtiqueta): Tipo LógicoCOMSI Raiz = nulo ENTONCES

DEVOLVER falsoSINO

Programación II, Universidad Católica del Uruguay 392012 Programación II, Universidad Católica del Uruguay 39

SINOSI Raíz.Etiqueta <> UnaEtiqueta ENTONCES

Devolver Raiz.BuscaParaQuitar(UnaEtiqueta) SINO

Raiz � Raiz.QuitarDEVOLVER verdadero

FIN SIFIN SI

FIN

Page 40: 5._Arboles_2012

Búsqueda y Eliminación en árboles binarios de búsquedaElementoArbolBinario.BuscaParaQuitar(UnaEtiqueta): boolean;COMSI unaEtiqueta < Etiqueta ENTONCES

SI HijoIzquierdo = nulo ENTONCES DEVOLVER falso // la etiqueta buscada no se encuentra en el arbol

SINO SI HijoIzquierdo.Etiqueta <> UnaEtiqueta ENTONCES // puede estar en el HI pero más abajoDEVOLVER HijoIzquierdo.BuscaParaQuitarUnaEtiqueta)

SINO HijoIzquierdo � HijoIzquierdo.Quitar // hace las sustituciones necesariasDEVOLVER verdadero

Programación II, Universidad Católica del Uruguay 402012 Programación II, Universidad Católica del Uruguay 40

DEVOLVER verdaderoFIN SI

FIN SISINO SI unaEtiqueta > Etiqueta ENTONCES

SI HijoDerecho = nulo ENTONCES DEVOLVER falso

SINO SI HijoDerecho.Etiqueta <> UnaEtiqueta ENTONCESDEVOLVER HijoDerecho.BuscaParaQuitar(UnaEtiqueta)

SINO HijoDerecho � HijoDerecho.QuitarDEVOLVER verdadero

FIN SIFIN SI

FIN SIFIN

Page 41: 5._Arboles_2012

Búsqueda y Eliminación en árboles binarios de búsqueda

ElementoArbolBinario.Quitar: Tipo ElementoArbolBina rio;

COMSI EsHoja ENTONCES

DEVOLVER nuloSINO

SI HijoIzquierdo = nulo ENTONCESDEVOLVER HijoDerecho

SINO SI HijoDerecho = nulo ENTONCES

Programación II, Universidad Católica del Uruguay 412012 Programación II, Universidad Católica del Uruguay 41

SINO SI HijoDerecho = nulo ENTONCES DEVOLVER HijoIzquierdo

SINO // No le falta ningún hijoElInmediatoAnterior � HijoIzquierdo.ElementoMayor // hoja, o la falta el hijo derechoCopiarDatos(ElInmediatoAnterior)buscaParaQuitar(ElInmediatoAnterior.Etiqueta);DEVOLVER THIS

FIN SIFIN SI

FIN SIFIN

Page 42: 5._Arboles_2012

Búsqueda y Eliminación en árboles binarios de búsqueda

ElementoArbolBinario.ElementoMayor: Tipo ElementoAr bolBinario;

// Devuelve el elemento con mayor clave en un árbol binario de búsqueda

ElementoArbolbinario Aux

COM

Programación II, Universidad Católica del Uruguay 422012 Programación II, Universidad Católica del Uruguay 42

COMAux � THISMIENTRAS Aux.HijoDerecho <> nulo ENTONCES

Aux � Aux.HijoDerechoFIN MIENTRASDEVOLVER Aux

FIN

Page 43: 5._Arboles_2012

Vista recursiva usada para calcular el tamaño de un árbol ST = SL + SR + 1

Programación II, Universidad Católica del Uruguay 432012

Page 44: 5._Arboles_2012

Vista recursiva usada para calcular la altura de un nodo:

HT = Max (HL + 1, HR + 1)

Programación II, Universidad Católica del Uruguay 442012

Page 45: 5._Arboles_2012

ARBOL BINARIO COMPLETO

1

2 3

Programación II, Universidad Católica del Uruguay 452012

5

1110

20 21 22 23

4

98

16 17 18 19

7

15

6

12

24 25

13 14

Page 46: 5._Arboles_2012

Propiedades de los Arboles Binarios Completos

� Notación

n número de nodos

e número de nodos

externos

i número de nodos

internos

h altura

� Propiedades:

• e ==== i ++++ 1

• n ==== 2e −−−− 1

• h ≤≤≤≤ i

• h ≤≤≤≤ (n −−−− 1)////2• e ≤≤≤≤ 2h

Programación II, Universidad Católica del Uruguay 462012

h altura • e ≤≤≤≤ 2h

• h ≥≥≥≥ log2 e

• h ≥≥≥≥ log2 (n ++++ 1) −−−− 1

Page 47: 5._Arboles_2012

Análisis de Búsqueda e Inserción en Arbol Binario de Búsqueda

� Los algoritmos de inserción y búsqueda analizados no controlan el balanceo del árbol.

� Se desconoce a priori la forma en que el árbol ha de crecer.

� Si el árbol estuviera balanceado, para encontrar una clave se precisarían

Programación II, Universidad Católica del Uruguay 472012

encontrar una clave se precisarían aproximadamente log n comparaciones.

� El peor caso se da para n/2 comparaciones.

� El problema es encontrar la cantidad promedio de comparaciones.

� n claves, n! árboles correspondientes a n! permutaciones de claves.

Page 48: 5._Arboles_2012

Ejercicios Arboles Binarios de Búsqueda

� ¿Qué es un árbol binario de búsqueda? Desarrolle el algoritmo de búsqueda correspondiente y evalúe su rendimiento.

� Desarrolle el algoritmo de eliminación en árbol binario de búsqueda y evalúe su rendimiento

Programación II, Universidad Católica del Uruguay 482012

rendimiento

� Muestre el resultado de insertar los elementos 3,1,4,6,9,2,5 y 7 en un árbol binario de búsqueda inicialmente vacío. Muestre después el resultado de eliminar la raíz

Page 49: 5._Arboles_2012

Arboles Balanceados

� Criterio de Adelson, Velskii y Landis:

• Un árbol está balanceado si y sólo si para cada nodo las alturas de sus dos subárboles difieren a lo sumo en 1.

Programación II, Universidad Católica del Uruguay 492012

subárboles difieren a lo sumo en 1.

• Asegura un O log(n) en el peor caso para las tres operaciones: búsqueda, inserción y eliminación.

• Se demuestra con la ayuda de los árboles de Fibonacci.

Page 50: 5._Arboles_2012

(a) Arbol balanceado altura log N; (b) árbol no balanceado, altura N – 1.

Programación II, Universidad Católica del Uruguay 502012

Page 51: 5._Arboles_2012

Arboles binarios de búsqueda posibles insertando las claves 1, 2 y 3 de diferentes maneras

Programación II, Universidad Católica del Uruguay 512012

Page 52: 5._Arboles_2012

Arboles de Fibonacci de alturas 2, 3 y 4

2 3 5

T2 T3 T4

Programación II, Universidad Católica del Uruguay 522012

2

1

3

42

1

5

7

4

3

2

61

Page 53: 5._Arboles_2012

ARBOLES BALANCEADOS

8

10

6

4

2

C

A

B

B

A

Desbalanceados

Programación II, Universidad Católica del Uruguay 532012

A

BB

CA

Balanceados

Page 54: 5._Arboles_2012

ARBOLES BALANCEADOS

� Inserción balanceada.

4

57

5

4

4

5

5

74

Programación II, Universidad Católica del Uruguay 542012

74

5

7

4

2

1

5

7

2

5

74

2

1

Page 55: 5._Arboles_2012

ARBOLES BALANCEADOS

� Inserción balanceada (cont.)

5

72

1 4

5

4

2

3 71

Programación II, Universidad Católica del Uruguay 552012

1

3

4 3 71

4

5

3

2

1

7

6

6

4

2

3 71 5

Page 56: 5._Arboles_2012

Arboles Balanceados

� Criterio de Adelson, Velskii y Landis:

• Un árbol está balanceado si y sólo si para cada nodo las alturas de sus dos subárboles difieren a lo sumo en 1.

Programación II, Universidad Católica del Uruguay 562012

subárboles difieren a lo sumo en 1.

• Asegura un O log(n) en el peor caso para las tres operaciones: búsqueda, inserción y eliminación.

• Se demuestra con la ayuda de los árboles de Fibonacci.

Page 57: 5._Arboles_2012

AVL

� Una inserción o eliminación puede destruir el balance

� Se debe revisar la condición de balance y corregir si es necesario

� Después de la Inserción, sólo los nodos que se encuentran en el camino desde el punto de

Programación II, Universidad Católica del Uruguay 572012

encuentran en el camino desde el punto de inserción hasta la raíz pueden tener el balance alterado

� Si se repara correctamente el equilibrio del nodo desequilibrado más profundo, se recupera el equilibrio de todo el árbol

Page 58: 5._Arboles_2012

Diferentes condiciones de desequilibrio

� Supongamos que X es el nodo cuyo equilibrio queremos ajustar

� Se pueden dar cuatro casos:1. Inserción en el subárbol izquierdo del hijo izquierdo de X

2. Inserción en el subárbol derecho del hijo izquierdo de X

Inserción en el subárbol izquierdo del hijo derecho de X

Programación II, Universidad Católica del Uruguay 582012

3. Inserción en el subárbol izquierdo del hijo derecho de X

4. Inserción en el subárbol derecho del hijo derecho de X

� 1 y 4 son simétricos respecto a X

� 2 y 3 son simétricos respecto a X

Page 59: 5._Arboles_2012

Rotación Simple para resolver el caso 1

L

L

Programación II, Universidad Católica del Uruguay 592012

a) Antes de la rotación b)Después de la rotación

Page 60: 5._Arboles_2012

La rotación simple balancea el árbol después de la inserción del 1.

Programación II, Universidad Católica del Uruguay 602012

a) Antes de la rotación b)Después de la rotación

Page 61: 5._Arboles_2012

Rotación simple simétrica para resolver el caso 4

R

R

Programación II, Universidad Católica del Uruguay 612012

a) Antes de la rotación b)Después de la rotación

Page 62: 5._Arboles_2012

La rotación simple no resuelve el caso 2.

Programación II, Universidad Católica del Uruguay 622012

a) Antes de la rotación b)Después de la rotación

Page 63: 5._Arboles_2012

Rotación doble LR para resolver el caso 2

L

R

Programación II, Universidad Católica del Uruguay 632012

a) Antes de la rotación b)Después de la rotación

Page 64: 5._Arboles_2012

Rotación doble restablece el balance después de la inserción del 5.

Programación II, Universidad Católica del Uruguay 642012

a) Antes de la rotación b)Después de la rotación

Page 65: 5._Arboles_2012

Rotación doble RL para resolver el caso 3.

L

R

Programación II, Universidad Católica del Uruguay 652012

a) Antes de la rotación b)Después de la rotación

Page 66: 5._Arboles_2012

CASO 1 LL TElementoAB rotacionLL ( TElementoAB k2 )

{TElementoAB k1 = k2.hijoIzq;

k2. hijoIzq = k1.hijoDer;k1. hijoDer = k2;return k1;

}

CASO 4 RRCASO 4 RRTElementoAB rotacionRR (TElementoAB k1 )

{TElementoAB k2 = k1.hijoDer;

k1. hijoDer = k2.hijoIzq;k2.hijoIzq = k1;return k2;

}2012 66Programación II, Universidad Católica del Uruguay

Page 67: 5._Arboles_2012

CASO 2 LR

TElementoAB rotacionLR ( TElementoAB k3 ){

k3. hijoIzq = rotacionRR( k3. hijoIzq );return rotacionLL( k3 );

}

CASO 3 RLCASO 3 RLTElementoAB rotacionRL ( TElementoAB k1 )

{k1. hijoDer = rotacionLL( k1. hijoDer );return rotacionRR( k1 );

}

2012 67Programación II, Universidad Católica del Uruguay

Page 68: 5._Arboles_2012

Ejercicios Arboles AVL

� ¿Qué es un Arbol Binario Balanceado – AVL? Describa las situaciones de desbalanceo posibles (ilustre con ejemplos) y qué operaciones se deben aplicar en cada caso para restituir la condición de AVL.

� Defina árbol balanceado. Describa una estructura de datos apta para implementarlo. Desarrolle el algoritmo de búsqueda e inserción en árbol balanceado. Ilustre el funcionamiento mediante un ejemplo. ¿Cuál es el orden del tiempo de ejecución del mismo?

� Insertar en un árbol AVL las siguientes claves, en el orden indicado,8, 5, 2, 1, 20, 15, 16, 17,7

Programación II, Universidad Católica del Uruguay 682012

8, 5, 2, 1, 20, 15, 16, 17,7mostrando la evolución del árbol. Luego eliminar las clave 15 y 7, mostrando los pasos.

� Muestre el resultado de insertar en un árbol AVL las siguientes claves, en el orden indicado,

2,1,4,5,9,3,6, 7mostrando la evolución del árbol. Luego muestre el resultado de eliminar las clave 4, 5 y 9, mostrando la evolución

� Insertar en un árbol AVL las siguientes claves, en el orden indicado1,88,77,4,5,9,18,56,33,21,45,99,22

mostrando la evolución del árbol. Luego eliminar las clave 18, 77, 1 y 45mostrando los pasos.

Page 69: 5._Arboles_2012

Ejercicios Arboles AVL

� Weiss – Cuestiones Breves• 18.3 y 18.4

� Weiss – Problemas teóricos• 18.9

• 18.10

Programación II, Universidad Católica del Uruguay 692012

Page 70: 5._Arboles_2012

ARBOLES

� Otros conceptos: similaridad• Se dice que dos árboles binarios, T y T’ son “similares” si tienen la misma estructura:

� a) ambos están vacíos o

� b) ambos no están vacíos y sus subárboles izquierdo y derecho son respectivamente similares.

Programación II, Universidad Católica del Uruguay 702012

derecho son respectivamente similares.

� existe una correspondencia uno a uno entre los nodos de T y T’ que preserva la estructura: Si los nodos u1 y u2 en T corresponden respectivamente a u1’ y u2’ en T’, entonces u1 está en el subárbol izquierdo de u2 sii u1’ está en el subárbol izquierdo de u2’, siendo válida la afirmación para los subárboles derechos.

Page 71: 5._Arboles_2012

ARBOLES

� Otros conceptos: equivalencia• Se dice que dos árboles binarios, T y T’ son “equivalentes” si son similares y además los nodos correspondientes contienen la misma información.

• Sea info(u) la información contenida en el nodo u . Los árboles son equivalentes sii

Programación II, Universidad Católica del Uruguay 712012

� a) ambos son vacíos

� b) ambos no son vacíos, info(raíz(T)) = info(raíz(T’)) y los subárboles izquierdo y derecho son respectivamente equivalentes.

Page 72: 5._Arboles_2012

ARBOLES

A

D

B

C

A

C

B

D

Programación II, Universidad Católica del Uruguay 722012

DCC D

W

Z

X

Y

A

D

B

C

1 2

34

Page 73: 5._Arboles_2012

ARBOLES, EQUIVALENCIA

Teorema: Sean los nodos de los árboles binarios T y T’u1,u2,...,un y u1’,u2’,....,un’’

en preorden . Para todo nodo u, seal(u) = 1 si u tiene un subárbol izquierdo no vacíol(u) = 0 en caso contrario

Programación II, Universidad Católica del Uruguay 732012

r(u) = 1 si u tiene un subárbol derecho no vacíor(u) = 0 en caso contrario

Entonces T y T’ son similares si y sólo si n = n’ yl(uj) = l(uj’)r(uj) = r(uj’) para 1 <= j <= n

T y T’ son equivalentes si y sólo si, además,info(uj) = info(uj’) para 1 <= j <= n

Page 74: 5._Arboles_2012

ARBOLES B (MULTICAMINO)

� Son usados en general como estructuras de búsqueda a gran escala.

� El almacenamiento de la información se realiza en memoria secundaria.

� Los nodos son “páginas” y los punteros

Programación II, Universidad Católica del Uruguay 742012

� Los nodos son “páginas” y los punteros a los hijos son direcciones de disco a otras páginas.

� Cada nodo contiene varias claves (elementos) y tiene varios hijos.

Page 75: 5._Arboles_2012

ARBOLES B (MULTICAMINO)

� Definición: Se dice que un árbol B es de orden n, si:• 1.- Cada página contiene a lo sumo 2n claves (elementos).

• 2.- Cada página, excepto la raíz, contiene n

Programación II, Universidad Católica del Uruguay 752012

• 2.- Cada página, excepto la raíz, contiene nelementos como mínimo.

• 3.- Las páginas que no son hojas, tienen m+1

descendientes, siendo m el número de claves de la página.

• 4.- Todas las páginas de hoja aparecen en el mismo nivel.

Page 76: 5._Arboles_2012

� Representación de una página (nodo):

ARBOLES B (MULTICAMINO)

Programación II, Universidad Católica del Uruguay 762012

p0 k1 p1 k2 p2 . . . . . . pm-1 km pm

Page 77: 5._Arboles_2012

ARBOLES B (MULTICAMINO)

� El criterio de búsqueda de una clave x en el árbol es cargar la primer página y buscar a x en ella. Si la búsqueda fracasa, se dará una de las siguientes situaciones:

Programación II, Universidad Católica del Uruguay 772012

situaciones:� 1.- ki < x < ki+1 , con 1 =< i < m , hay que continuar la búsqueda en la página apuntada por pi .

� 2.- km < x , hay que continuar la búsqueda en la página apuntada por pm.

� 3.- x < k1 , hay que continuar la búsqueda en la página apuntada por p0 .

Page 78: 5._Arboles_2012

ARBOLES B (MULTICAMINO)

� El criterio de inserción:

1. Si el número de elementos en la página es m < 2n , se inserta directamente.

2. Si la página ya está llena, las 2n+1

claves resultantes se dividen en dos

Programación II, Universidad Católica del Uruguay 782012

claves resultantes se dividen en dos páginas, pasando la clave central a la página antecesora.

3. Esto asegura el balance, y hace que los desbordes se propaguen hacia arriba. El árbol B crece de las hojas a la raíz.

Page 79: 5._Arboles_2012

Ejercicio Arbol B

� Defina Arbol B, comente sus principales características y describa una estructura de datos para su implementación. Describa (a alto nivel) un algoritmo para insertar un elemento en un árbol B. Dadas las siguientes claves, insértelas en un árbol B de orden 2 (o

Programación II, Universidad Católica del Uruguay 792012

claves, insértelas en un árbol B de orden 2 (o grado 5) mostrando todos los pasos

3,7, 41, 56, 4, 23, 8, 24, 97, 31, 17, 15, 16, 2, 25, 1, 6

y luego proceda a eliminar las siguientes, en el orden indicado (mostrando también todos los pasos)16, 24, 7.

Page 80: 5._Arboles_2012

� TElemento

� Clave : Tclave;

� Pagina : PPagina;

� PPagina : referencia (puntero) a TPagina

ARBOL B

Programación II, Universidad Católica del Uruguay 802012

� PPagina : referencia (puntero) a TPagina

� TPagina

� P0 : PPagina;

� indice : [0..2*n];

� elementos : array[1..2*n] de TElemento

Page 81: 5._Arboles_2012

ARBOLES B - INSERCIÓN

� BuscaInserta (laClave : TClave; p :PPagina ; h: boolean; elem: Telemento);

� COM� SI p = nulo ENTONCES InsertarClave(pone h en true)� SINO� CON p HACER

Programación II, Universidad Católica del Uruguay 812012

� CON p HACER� BuscaClaveEnPágina� SI EncontróClave ENTONCES ProcesarDatos� SINO� BuscaInserta( x, pi, h, u)� SI h ENTONCES� SI m < 2n ENTONCES insertar u en la página y hacer h=false� SINO Dividir página y Subir el elemento de la mitad� FIN

Page 82: 5._Arboles_2012

TDA ARBOL B

� TArbolB• Buscar (unaClave: TClave): TPagina //Dada una clave, la operación devuelve la página en la que se encuentra; si la clave no

está en el árbol se devuelve la página nula.• Insertar (unaClave: TClave): boolean // Devuelve verdadero en caso de que la inserción haya sido exitosa, y falso en caso

contrario.• Eliminar (unaClave: TClave): boolean //Devuelve verdadero en caso de que la eliminación haya sido exitosa, y falso en caso

contrario.

� TPagina (básicas)• esHoja(): boolean // Devuelve verdadero en caso de ser hoja, y falso en caso contrario.• esRaiz (): boolean // Devuelve verdadero en caso de ser la raíz, y falso en caso contrario.• estaLlena (): boolean // Devuelve verdadero en caso de no tener lugar para insertar un elemento en la página, y

falso en caso contrario.• subOcupada (): boolean // Devuelve verdadero en caso de tener n-1 elementos, y falso en caso contrario.• buscarEnPágina(unaClave: TClave): TPagina // En caso de que la clave buscada esté en la página devuelve la

propia página, en caso contrario devuelve la página en la cual se debería seguir buscando.

Programación II, Universidad Católica del Uruguay 822012

propia página, en caso contrario devuelve la página en la cual se debería seguir buscando.• InsertarEnPágina (unElemento: TElemento): boolean // Devuelve verdadero si se puede insertar

adecuadamente el elemento en la página, y falso en caso contrario.• eliminarDePagina (unaClave: TClave): TElemento // Elimina y devuelve el elemento cuya clave es UnaClave, y el

elemento nulo en caso que la clave no se encuentre en la página.• crearPágina (): TPagina // Devuelve una página vacía, sin elementos.• distribuirElementos (otraPágina: TPagina): TElemento //Deja la mitad menos uno de los elementos en la página,

la otra mitad en la OtraPágina, y devuelve el elemento con la clave del medio.

(Avanzadas)• buscar (unaClave: TClave): TPagina // busca la clave en el subárbol del cual la página es raíz; si la clave está

devuelva la página en la que se encuentra, y si no está devuelve nulo-• insertar (unaClave: TClave): boolean // Devuelve verdadero en caso de que la inserción haya sido exitosa, y falso

en caso contrario.• eliminar (unaClave: TClave): boolean // Devuelve verdadero en caso de que la eliminación haya sido exitosa, y

falso en caso contrario.� TElemento:

• crearElemento (unaClave: TClave): TElemento• setPaginaHija (unaPagina: TPagina): boolean• setClave (unaPagina: TPagina): boolean

Page 83: 5._Arboles_2012

OPERACIONES TDA ARBOL B

//Buscar una clave en el árbol� TArbolB.buscar (unaClave: TClave): TPagina

COMSi Raíz <> nulo entonces

Devolver Raiz.Buscar (unaClave)Sino

Devolver nuloFin siFIN

Programación II, Universidad Católica del Uruguay 832012

� TPagina.buscar (unaClave: TClave): TPagina

COMpaginaSiguiente � buscarEnPagina(UnaClave)Si paginaSiguiente = THIS entonces

Devolver THIS // en esta página encontramos la claveSino

Si paginaSiguiente = NULO entoncesDevolver nulo // la clave no está en el árbol

Sino Devolver paginaSiguiente.buscar(unaClave) // seguimos buscandoFinsi

Fin siFIN

Page 84: 5._Arboles_2012

OPERACIONES TDA ARBOL B

//Insertar una clave en el árbolTArbolB. insertar (unaClave: TClave): booleanCOMSi Raíz <> nulo entonces

Si Raiz.Insertar (unaClave) = nulo entoncesDevolver verdadero

Sino Devolver falsoFin si

SinoDevolver falso

Fin siFIN

TPagina. Insertar (Tipo clave UnaClave): TElementoCOM

unelemento � crearElemento(“ ”)paginaSiguiente � buscarEnPágina(unaClave)Si paginaSiguiente = THIS entonces

Devolver falso // ¡esta clave ya existe!Sino

Si paginaSiguiente = nulo entonces // hay que insertar en la actualunElemento.SetClave(unaClave)Devolver verificaEInserta(unElemento)

Sino // seguimos buscando

Programación II, Universidad Católica del Uruguay 842012

Sino // seguimos buscandounElemento � PáginaSiguiente.Insertar(UnaClave)

Si unElemento <> nulo entonces Devolver verificaEInserta(UnElemento)Sino Devolver nulo

Fin siFinsi

Fin siFIN

Page 85: 5._Arboles_2012

OPERACIONES TDA ARBOL B

verificaEInserta (unElemento : TElemento) : TElementoCOMSi (no(EstáLlena)) entoncesSi InsertarEnPágina(UnElemento) entoncesDevolver nuloSino Devolver(UnElemento)Fin si

Sino // estaba llenaTipo página OtraPágina � CrearPágina()OtraPágina.InsertarEnPágina(UnElemento)

Programación II, Universidad Católica del Uruguay 852012

OtraPágina.InsertarEnPágina(UnElemento)UnElemento � DistribuirElementos(OtraPágina)UnElemento.SetPáginaHija(OtraPágina)Si (no(EsRaíz)) entonces

Devolver UnElementoSino //¡estamos en la raíz!Tipo página NuevaRaíz � CrearPágina()NuevaRaíz.InsertarEnPágina(UnElemento)NuevaRaiz.SetHijaMenor(Raíz)Raíz � NuevaRaízDevolver nulo

Fin SiFin si

FIN

Page 86: 5._Arboles_2012

ARBOLES B, ELIMINACION

� Dos circunstancias diferentes:• El elemento a suprimir se halla en una página de hoja; entonces el algoritmo para su eliminación es fácil y sencillo.

• El elemento no se encuentra en una página de

Programación II, Universidad Católica del Uruguay 862012

• El elemento no se encuentra en una página de hoja; hay que sustituirlo por uno de los dos elementos lexicográficamente contiguos, que resultan estar en las páginas de hoja. En este caso, se debe escoger un criterio de selección del candidato a sustituto: el más a la derecha del subárbol izquierdo, o el más a la izquierda del subárbol derecho.

Page 87: 5._Arboles_2012

ARBOLES B, ELIMINACION

� El elemento no está en una página de hoja:• Bajar por el apuntador izquierdo del elemento a eliminar.

• Hasta llegar a la página de hoja, bajar por los apuntadores de la extrema derecha. Sea P la página de hoja a la que se llega.

• Reemplazar el elemento a eliminar por el del extremo

Programación II, Universidad Católica del Uruguay 872012

• Reemplazar el elemento a eliminar por el del extremo derecho de P y reducir el tamaño de P en uno.

• La disminución del tamaño de P debe acompañarse de la verificación del tamaño con el que queda la página.

• Si el número de elementos resultante es menor que la cantidad mínima autorizada (m < n ) , se produce Sub-ocupación.

Page 88: 5._Arboles_2012

ARBOLES B, ELIMINACION

� Administración de la sub-ocupación• El único recurso consiste en tomar o anexar un elemento a

partir de una de las páginas vecinas, digamos Q.

• A la estrategia de distribuir de manera uniforme los elementos en las páginas vecinas P y Q se le llama “Balanceo de Páginas” .

Programación II, Universidad Católica del Uruguay 882012

“Balanceo de Páginas” .

• Si Q ya tenía su tamaño mínimo, debe combinarse los elementos de ambas páginas en una sola. A esta estrategia se le llama “Mezcla de Páginas”.

• El proceso de mezcla obliga a insertar la clave del medio en la página madre de P y Q y posteriormente prescindir completamente de la página Q.

Page 89: 5._Arboles_2012

ARBOLES B, ELIMINACION

10 20

5 7 8 22 24 42 45 46

30 40

13 15 18 32 35 38

25

26 27

Programación II, Universidad Católica del Uruguay 892012

� Eliminar las siguientes claves:• 25, 45, 24• 38, 32• 8, 27, 46, 13, 42• 5, 22, 18, 26• 7, 35, 15

Page 90: 5._Arboles_2012

ARBOLES B, ELIMINACION

10 22 30 40

26 27 13 15 18 205 7 8 32 35 38 42 46

10 22 30

a)

Programación II, Universidad Católica del Uruguay 902012

10 22 30

13 15 18 205 7 8 26 27 35 40 42 46

10 22

15 18 205 7 26 30 35 40

15

7 10 20 30 35 40

10 20 30 40 b)

c) d)

e)

Page 91: 5._Arboles_2012

ARBOLES B BINARIOS

� Son los árboles B de orden 1.

� Por lo tanto cada nodo contiene entre uno y dos elementos, y es antecesor de entre dos y tres hijos.

� También se les da el nombre de árbol 2-

Programación II, Universidad Católica del Uruguay 912012

� También se les da el nombre de árbol 2-3.

� No son adecuados para el trabajo en memoria secundaria, sino que se usan para memoria primaria.

� Por ello se ha ideado una forma de representación que ahorra memoria.

Page 92: 5._Arboles_2012

ARBOLES B BINARIOS

� Representación de nodos de árbol B binarios

A

Programación II, Universidad Católica del Uruguay 922012

ab

ab c

A

Ba

b c

A B

a b c

Page 93: 5._Arboles_2012

ARBOLES B BINARIOS

� TNodo� clave : TClave;

Datos : TDatos;

Programación II, Universidad Católica del Uruguay 932012

Datos : TDatos;� izquierdo, derecho :TNodo;� Horizontal : boolean;�

Page 94: 5._Arboles_2012

ARBOLES B BINARIOS

� Inserción : cuatro posibles situaciones que se presentan por el crecimiento de los subarboles de la derecha o de la izquierda

� El caso más sencillo se da cuando crece el subárbol de la derecha de un nodo A y cuando A es la única clave en su página

Programación II, Universidad Católica del Uruguay 942012

A

Ba

b c

A B

a b c

Page 95: 5._Arboles_2012

ARBOLES B BINARIOS

A

Ca b

B A

a b

B C

c d

Programación II, Universidad Católica del Uruguay 952012

c d B

b

C

d

A

ca

Inserción del nodo C cuando A ya está llena, se Crea página y balance

Page 96: 5._Arboles_2012

� Inserción del nodo A :el subárbol de la izquierda de un nodo B ha aumentado de altura, haciendo que una clave suba

ARBOLES B BINARIOS

B BA A B

Programación II, Universidad Católica del Uruguay 962012

� B no tiene referencias horizontales a la izquierda, rotación

A c

ba

cba a b c

Page 97: 5._Arboles_2012

ARBOLES B BINARIOS

c

C

A d

B A

a b

B C

c d

Programación II, Universidad Católica del Uruguay 972012

cA d

ba B

b

C

d

A

ca

Inserción del nodo A,sobreocupación

Page 98: 5._Arboles_2012

ARBOLES B BINARIOS SIMETRICOS

� Son los que cumplen con las siguientes propiedades:• Todo nodo contiene una clave y, como máximo, dos

subárboles.

• Todo puntero puede ser horizontal o vertical. No existen dos punteros consecutivos horizontales en ninguna

Programación II, Universidad Católica del Uruguay 982012

dos punteros consecutivos horizontales en ninguna trayectoria de búsqueda (hay indicadores de horizontalidad para ambos punteros)

• Todos los nodos terminales aparecen en el mismo nivel.

• La longitud de la trayectoria de búsqueda es siempre menor a 2 log(N).

• Ejercicio Wirth 4.85

Page 99: 5._Arboles_2012

ARBOLES B BINARIOS SIMETRICOS

C

A

B CA B B

CA

Inserción izquierda izquierda

Programación II, Universidad Católica del Uruguay 992012

C

B

A

B

CA

Inserción izquierda izquierda

CA B

Inserción izquierda derecha

Page 100: 5._Arboles_2012

ARBOLES B BINARIOS SIMETRICOS

A

C

B CA B B

CA

Programación II, Universidad Católica del Uruguay 1002012

A

B

C

B

CA

Inserción derecha derecha

Inserción derecha izquierda

A CB

Page 101: 5._Arboles_2012

ARBOLES B BINARIOS SIMETRICOSEjercicios

� ¿qué largo puede tener la trayectoria más larga de búsqueda en un árbol BBS ?.

� Realizar las siguientes inserciones en árbol BBS:

Programación II, Universidad Católica del Uruguay 1012012

BBS:

� 1) 1 2; 3; 4 5 6; 7;

� 2) 5 4; 3; 1 2 7 6;

� 3) 6 2; 4; 1 7 3 5;

� 4) 4 2 6; 1 7; 3 5;

Page 102: 5._Arboles_2012

Recorridos de los árboles genéricos

� Un recorrido visita los nodos del árbol de una forma sistemática

� Los recorridos u ordenamientos se definen recursivamente como sigue:• Si un árbol A es nulo, entonces el listado de los nodos de A en

preorden, inorden o postorden, es la lista vacía.

Programación II, Universidad Católica del Uruguay 1022012

preorden, inorden o postorden, es la lista vacía.

• Si A contiene un sólo nodo, entonces ese nodo constituye el listado en los tres órdenes.

A1 A2 Ak

n

...

Page 103: 5._Arboles_2012

Recorridos de Arboles genéricos

� Preorden : Raíz de A, seguido de los nodos de A1 en preorden, luego los de A2 en preorden, etc.

� Inorden : Nodos de A1 en inorden, luego la raíz, luego los nodos de los restantes

Programación II, Universidad Católica del Uruguay 1032012

raíz, luego los nodos de los restantes subárboles en inorden.

� Postorden: Nodos de A1 en postorden, luego los de A2 en postorden, hasta el final, y luego la raíz.

Page 104: 5._Arboles_2012

Recorrida en Preorden

� En un recorrido en preorden, un nodo es visitado antes que sus descendientes

� Aplicación: imprimir un documento estructurado

Algoritmo preOrden(v)visitar(v)Para cada hijo w de v

preorden(w)

Programación II, Universidad Católica del Uruguay 1042012

documento estructurado

Informe TDAArbol

1. Introducción Casos2. Métodos

2.1 Insertar 2.2 Buscar1.1 General 1.2 Aplicación 2.3 Eliminar

1

2

3

5

46 7 8

9

Page 105: 5._Arboles_2012

Recorrida en Postorden

� En un recorrido en postorden, un nodo es visitado después de sus descendentes

� Aplicación: calcular el espacio usado por archivos en un directorio y sus subdirectorios

Algoritmo postOrden(v)Para cada hijo w of v

postOrden(w)visitar(v)

Programación II, Universidad Católica del Uruguay 1052012

subdirectorios

p2/

trabajos/todo.txt

1Kprogramas/

DDR.java10K

Stocks.java25K

h1c.doc3K

h1nc.doc2K

Robot.java20K

9

3

1

7

2 4 5 6

8

Page 106: 5._Arboles_2012

Recorrer el siguiente árbol en preorden y postorden

Programación II, Universidad Católica del Uruguay 1062012

Page 107: 5._Arboles_2012

Representación de árboles genéricosPrimer hijo – siguiente hermano

Programación II, Universidad Católica del Uruguay 1072012

Page 108: 5._Arboles_2012

Recorridas de árboles genéricos - preorden

TArbolGenerico.preOrden;

COM

SI Raiz <> nulo

Raiz.preOrden;

FINSI

FIN

TNodoArbolGenerico.preOrden;

Programación II, Universidad Católica del Uruguay 1082012

TNodoArbolGenerico.preOrden;

COM

Imprimir(etiqueta);

unHijo � PrimerHijo;

MIENTRAS unHijo <> nulo hacer

unHijo.preOrden;

unHijo � unHijo.HermanoDerecho;

FIN MIENTRAS

FIN

Page 109: 5._Arboles_2012

Recorridas de árboles genéricos - postorden

TArbolGenerico.postOrden;

COM

SI Raiz <> nulo

Raiz.postOrden;

FINSI

FIN

Programación II, Universidad Católica del Uruguay 1092012

TNodoArbolGenerico.postOrden;

COM

unHijo � PrimerHijo;

MIENTRAS unHijo <> nulo hacer

unHijo.preOrden;

unHijo � unHijo.HermanoDerecho;

FIN MIENTRAS

Imprimir(etiqueta);

FIN

Page 110: 5._Arboles_2012

� Representación de árboles por lista de padres.

REPRESENTACION DE ARBOLES

1

320 335552211

10987654321

A

Programación II, Universidad Católica del Uruguay 1102012

4

6

5

7 8

9 10TDA Tnodo integer;TDA TArbolA = array [1..MaxNodos] de Tnodo;funcion HermanoDerecho(unNodo): Tnodo;i, padre : Tnodo;COMpadre = A[n];PARA i DE n + 1 A MaxNodos HACER

(* busca un nodo después del n que tenga el mismo padre *)SI A[i] = padre DEVOLVER i ;

DEVOLVER 0 ; (* devuelve el nodo nulo si no encontró hermano derecho *)FIN ;

Page 111: 5._Arboles_2012

REPRESENTACION DE ARBOLES

� Representación de árboles por arreglo con lista de hijos.

a - b(c/d + e/f)

A : array[1..11] de op: caracter;izq, der: entero;

end

a

-

Programación II, Universidad Católica del Uruguay 1112012

a

+

*

e f

/

b

c

/

d

1234567891011 f 0

-a*b+

//

cde

20406810000

305079110000

Page 112: 5._Arboles_2012

ARBOLES

� Largo de Camino:es el número de ramas o aristas que deben ser recorridas para llegar desde la raíz hasta un cierto nodo. La raíz tiene largo de camino 1, sus descendientes directos tienen largo 2, etc..

� Largo de Camino del árbol: Se define como la suma de los largos de camino de todos sus componentes.

Programación II, Universidad Católica del Uruguay 1122012

los largos de camino de todos sus componentes. También se le llama “largo de camino interno”. El largo de camino medio es:

Pn

n iI ii

= •∑1

Page 113: 5._Arboles_2012

ARBOLES – LARGO DE CAMINO EXTERNO

A

B C

Programación II, Universidad Católica del Uruguay 1132012

D

J

HGFE

MOLKI PN

Page 114: 5._Arboles_2012

ARBOLES – NODOS ESPECIALES

A

B C

Programación II, Universidad Católica del Uruguay 1142012

D

J

HGFE

MOLKI PN

Page 115: 5._Arboles_2012

� Largo de camino externo: suma de los largos de camino de los nodos especiales. Si el número de nodos especiales en el nivel i es mi entonces el largo de camino externo promedio es:

ARBOLES

Pm

m iE ii

= •∑1

Programación II, Universidad Católica del Uruguay 1152012

� El máximo número de nodos del árbol será:

N h d d d ddh i

i

h( ) ...= + + + + =−

=

−∑1 2 1

0

1

m i