84
Ideas generales ´ Arboles binarios ´ Arboles generales Recorridos de ´ arboles ´ Arboles binarios de b´ usqueda Ejemplos y ejercicios Arboles R. Gonz´ alez del Campo - Yolanda Garc´ ıa Ruiz (UCM) April 14, 2010 R. Gonz´ alez del Campo - Yolanda Garc´ ıa Ruiz (UCM) Arboles

Trar Boles

Embed Size (px)

Citation preview

Page 1: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM)

April 14, 2010

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 2: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

IntroduccionAplicacionesTerminologıa

Arboles: Estructuras no lineales

Idea formal: Un arbol es un grafo conexo sin ciclos

Idea intuitiva: Los arboles expresan relaciones jerarquicas enlas que:

Cada elemento (excepto el primero) tiene un unico superiorinmediatoCada elemento tiene varios siguientes inmediatos

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 3: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

IntroduccionAplicacionesTerminologıa

Son una generalizacion de las listas:

Listas: cada elemento tiene un unico sucesor.Arboles: los elementos pueden tener mas de un sucesor.

Permiten representar la nocion de jerarquıa. Ejemplos:

Arboles genealogicos: familiares, linguısticos.Arboles sintacticos.Estructura de los directorios.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 4: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

IntroduccionAplicacionesTerminologıa

Representacion de estructuras anidadas

Representacion de expresiones

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 5: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

IntroduccionAplicacionesTerminologıa

A los elementos de la relacion se les llama nodos

El unico nodo sin antecesores es la raız

Los nodos sin descendientes se llaman hojas y el resto nodosinternos

Se llama rama a la secuencia de nodos que lleva de la raız acualquiera de las hojas

Llamamos padre de un nodo a su antecesor inmediato

Llamamos hijos de un nodo a sus descendientes inmediatos

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 6: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

IntroduccionAplicacionesTerminologıa

Arboles binarios: todo nodo tiene siempre dos hijos (aunquealguno pueda ser vacıo). Un arbol binario puede ser vacıo.

Arboles generales: el numero de hijos de cada nodo esvariable.

Grado del arbol: maximo numero de hijos que un nodo puedetener → Arboles n-arios.

¡Los arboles binarios no son un caso particular de arbolesn-arios con n=2!:

En un arbol binario si un nodo tiene un solo hijo (el otro esvacıo), es preciso distinguir si se trata del hijo izquierdo oderecho.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 7: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

IntroduccionAplicacionesTerminologıa

¿Como distinguir un arbol binario de un arbol n-ario cuando n=2?Si para nosotros significa lo mismo

A

∅B y

A

B∅ ,es un arbol n-ario. Si significan dos cosas distintas, se trata de unarbol binario.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 8: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Operaciones a considerar:

crear un arbol vacıo,

construir un arbol a partir de un elmento y dos arboles,

consultar la raız,

calcular el hijo izquierdo,

calcular el hijo derecho, y

determinar si un arbol es vacıo.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 9: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Especificacion

especificacion ARBOLES-BINARIOS[ELEM]usa BOOLEANOStipos arbolBinoperaciones

arbolBBV acio : arbolBin(constructora)plantar : arbolBin× elemento× arbolBin→ arbolBin(constructora)raiz : arbolBin→ elementohijo− iz : arbolBin→ arbolBinhijo− de : arbolBin→ arbolBines− arbolBBV acio? : arbolBin→ bool

variables

e: elementoiz,de: arbol

ecuaciones

hijo− iz(arbolBBV acio) = errorhijo− iz(plantar(iz, e, de) = izhijo− de(arbolBBV acio) = errorhijo− de(plantar(iz, e, de) = deraiz(arbolBBV acio) = errorraiz(plantar(iz, e, de) = ees− arbolBBV acio?(arbolBBV acio) = ciertoes− arbolBBV acio?(plantar(iz, e, de)) = falso

fin-especificacion

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 10: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Observaciones:

Las constructoras son libres → No son necesarias ecuacionesde equivalencia.

Extension de la especificacion de arboles binarios. Operaciones aconsiderar:

calcular la altura de un arbol: el numero de nodos de la ramamas larga,

calcular el numero de nodos,

calcular el numero de hojas: aquellos cuyos hijos son vacıos, y

calcular la imagen especular de un arbol.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 11: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Especificacion

especificacion ARBOLES-BINARIOS+[ELEM]usa ARBOLES-BINARIOS[ELEM],BOOLEANOSoperaciones

altura : arbolBin→ natnum− nodos : arbolBin→ natnum− hojas : arbolBin→ natespecular : arbolBin→ arbolBin

variables

e: elementoiz,de: arbol

ecuaciones

altura(arbolBBV acio) = 0altura(plantar(iz, e, de)) = 1 + max(altura(iz), altura(de))num− nodos(arbolBBV acio) = 0num− nodos(plantar(iz, e, de)) = 1 + num− nodos(iz) + num− nodos(de)num− hojas(arbolBBV acio) = 0num− hojas(plantar(iz, e, de)) = 1⇐es− arbolBBV acio(iz) ∧ es− arbolBBV acio(de)num− hojas(plantar(iz, e, de)) = num− hojas(iz) + num− hojas(de)⇐¬(es− arbolBBV acio(iz)) ∨ ¬(es− arbolBBV acio(de))especular(arbolBBV acio) = arbolBBV acioespecular(plantar(iz, e, de)) = plantar(especular(dr), e, especular(iz))

fin-especificacion

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 12: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Representacion:

Cada nodo de la estructura enlazada representa a un nodo delarbol.

Cada arista se representa mediante dos punteros.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 13: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Representacion

tipos

enlace-arbol: puntero a nodo-arbolnodo-arbol : reg

valor: elementoiz,de: enlace-arbol

fregarbolBin: enlace-arbol

ftipos

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 14: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Operaciones:

Operacion

fun arbolBBVacio() dev a: arbolBina ← nil

fin fun

Operacion

fun plantar(iz: arbolBin, e: elemento, de: arbolBin) dev a:arbolBin

reservar(a)a ↑ .valor ← ea ↑ .iz ← iza ↑ .de ← de

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 15: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Operacion

fun hijo-iz(a: arbolBin) dev b: arbolBinsi a = nil entonces

Error(arbol vacıo)si no

b ← a ↑ .izfin si

fin fun

Operacion

fun hijo-de(a: arbolBin) dev b: arbolBinsi a = nil entonces

Error(arbol vacıo)si no

b ← a ↑ .drfin si

fin funR. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 16: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Operacion

fun raiz(a: arbolBin) dev e: elementosi a = nil entonces

Error(arbol vacıo)si no

e ← a ↑ .valorfin si

fin fun

Operacion

fun es-arbolBBVacio(a: arbolBin) dev b: boolb ← (a=nil)

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 17: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Idea: Almacenar el arbol por niveles dejando los huecos paraa los hijos ”ausentes”

|’+’ | ’9’ | ’-’ | | | ’*’ | 4 | | | | | ’5’ | ’8’ | | | |0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Para un arbol de altura n se necesita un array de longitud2n − 1Si un nodo esten la posicion i:

Su hijo izquierdo estara en la posicion 2*i+1Su hijo derecho estara en la posicion 2*i+2

Si un nodo esta en la posicion i su padre estara en la b i−12 c

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 18: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas

Quedan huecos. Es preferible para minimizarlos que el arbolsea completo o semicompleto

Si el arbol va a contener pocos nodos (en relacion a su altura)sera preferible utilizar la implementacion basada en punteros

La implementacion con tablas exige que todos los nodos estenconsecutivos, mientras que la de punteros puede aprovechar”trozos”pequenos de memoria.

Ventaja: en la implementacion con tablas es posible pasardirectamente de los hijos al padre, mientras que en la depunteros habrıa que incluir un puntero adicional

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 19: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Operaciones a considerar:

Habra tres constructoras: plantar que crea un arbol general apartir de una raız y una lista de arboles hijos.bosqueVacıo que crea una lista vacıa de arbolesanadirArbol a una lista de arboles.

consultar la raız,

calcular la sucesion de hijos,

calcular el numero de hijos,

calcular el hijo i-esimo, y

determinar si un arbol es una hoja.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 20: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Notas:

Los tipos bosque y arbol se definen mutuamente:

Un arbol se construye a partir de un bosque.Un bosque consta de una lista de arboles.Caso base: un bosque vacıo que da lugar a un arbol que notiene hijos (hoja) → No existe ”el arbol vacıo” para arbolesgenerales.

Como el numero de hijos es variable necesitamos un tipo pararepresentar las listas de arboles → ”bosques”.

Las constructoras (libres) del tipo bosque son bosqueVacio yaniadirArbol.

plantar es la unica constructora del tipo arbol.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 21: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Especificacion

especificacion ARBOLES-GENERALES[ELEM]usa BOOLEANOS, NATURALEStipos arbolGen, bosqueoperaciones

plantar : elemento× bosque→ arbolGen(constructora)bosqueV acio : bosque(constructora)aniadirArbol : arbolGen× bosque→ bosque(constructora)raiz : arbolGen→ elementohijos : arbolGen→ bosquenumHijos : arbolGen→ natlongitud : bosque→ natsub− arbol : arbolGen× nat→ arbolGen−[−] : bosque× nat→ arbolGenes− hoja? : arbolGen→ bool

variables

e: elementoa: arbolGenb: bosquei: nat

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 22: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Especificacion

ecuaciones

raiz(plantar(e, b)) = ehijos(plantar(e, b)) = bnumHijos(plantar(e, b)) = longitud(b)longitud(bosqueV acio) = 0longitud(aniadirArbol(a, b)) = 1 + longitud(b)subarbol(plantar(e, b), i) = b[i]b[i] = error ⇐ i = 0 ∨ i > longitud(b)aniadirArbol(a, b)[1] = aaniadirArbol(a, b)[i] = b[i− 1]⇐ 1 < i ∧ i ≤ longitud(b) + 1es− hoja?(a) = (numHijos(a) = 0)

fin-especificacion

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 23: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Extension de los arboles generales:

calcular la altura de un arbol,

calcular el numero de nodos,

calcular el numero de hojas, y

calcular el grado de un arbol.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 24: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Especificacion

especificacion ARBOLES-GENERALES+[ELEM]usa ARBOLES-GENERALES[ELEM],NATURALESoperaciones

altura : arbolGen→ natnum− nodos : arbolGen→ natnum− hojas : arbolGen→ natgrado : arbolGen→ nat

Operaciones privadas

altura− bosque : bosque→ natnum− nodos− bosque : bosque→ natnum− hojas− bosque : bosque→ natgrado− bosque : bosque→ nat

variables

e: elementoa: arbolGenb: bosque

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 25: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Especificacion

ecuaciones

altura(plantar(e, b)) = 1 + altura− bosque(b)altura− bosque(bosqueV acio) = 0altura− bosque(aniadirArbol(a, b)) = max(altura(a), altura− bosque(b))num− nodos(plantar(e, b)) = 1 + num− nodos− bosque(b)num− nodos− bosque(bosqueV acio) = 0num−nodos−bosque(aniadir(a, b)) = num−nodos(a)+num−nodos−bosque(b)num− hojas(plantar(e, bosqueV acio)) = 1num− hojas(plantar(e, aniadir(a, b))) = num− hojas− bosque(aniadir(a, b))num− hojas− bosque(bosqueV acio) = 0num−hojas−bosque(aniadir(a, b)) = num−hojas(a)+num−hojas−bosque(b)grado(plantar(e, b)) = max(long(b), grado− bosque(b))grado− bosque(bosqueV acio) = 0grado− bosque(aniadir(a, b)) = max(grado(a), grado− bosque(b))

fin-especificacion

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 26: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Representacion: Utilizamos un arbol binario para representarlo.Ejemplo:

A

D

H

CB

GF

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 27: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

se representa como:

A

∅B

C

D

∅H

F

G∅

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 28: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Semantica del arbol binario:

La arista izquierda de un nodo senala al primer hijo.

La arista derecha de un nodo senala a su primer hermano.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 29: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Representacion

tipos

enlace-arbol: puntero a nodo-arbolnodo-arbol : reg

valor: elementoprimerHijo,siguienteHermano: enlace-arbol

fregarbolGen: enlace-arbolbosque: enlace-arbol

ftipos

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 30: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Operaciones:

Operacion

fun plantar( e: elemento, b: bosque) dev a: arbolGenreservar(a)a ↑ .valor ← ea ↑ .primerHijo ← ba ↑ .siguienteHermano ← nil

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 31: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Operacion

fun bosqueVacio() dev b: bosqueb ← nil

fin fun

Operacion

proc aniadirArbol(a: arbolGen, b:bosque)a ↑ .siguienteHermano← bb← a

fin proc

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 32: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Ejemplo. Construccion del arbol:

A

DCB

Operacion

D ← plantar(D, bosqueV acio())

D

∅∅

que representa al arbol:

D

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 33: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

B ← plantar(B, bosqueV acio())C ← plantar(C, bosqueV acio())Bosque← bosqueV acio()aniadirArbol(D,Bosque)

Bosque = [D]

D

∅∅

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 34: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

aniadirArbol(C, Bosque)aniadirArbol(B, Bosque)

Bosque = [B, C,D] a traves del enlace siguienteHermano!!!

B

C

D

∅∅

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 35: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Arbol← plantar(A, Bosque)

A

∅B

C

D

∅∅

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 36: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Operacion

fun raiz(a: arbolGen) dev e: elementoe← a ↑ .valor

fin fun

Operacion

fun hijos(a: arbolGen) dev b: bosqueb← a ↑ .primerHijo

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 37: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Operacion

fun numHijos(a: arbolGen) dev n: natn← longitud(a ↑ .primerHijo)

fin fun

Operacion

fun longitud(b: bosque) dev n: natvar c: enlace-arbolc← bn← 0mientras c 6= nil hacer

n← n + 1c← c ↑ .siguienteHermano

fin mientrasfin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 38: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Operacion

fun sub-arbol(a: arbolGen, i: nat) dev h: arbolGenh← consultar(a ↑ .primerHijo, i)

fin fun

Operacion

fun consultar(b: bosque, i: nat) dev h: arbolGensi i=0 entonces

Error(Indice no valido)si no

h← bj ← 1mientras h 6= nil ∧ j 6= i hacer

j ← j + 1h← h ↑ .siguienteHermano

fin mientrassi h=nil entonces

Error(Indice no valido)fin si

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 39: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Especificacion de los arboles generalesImplementacion de los arboles generales

Operacion

fun es-hoja?(a: arbolGen) dev r: boolr ← (a ↑ .primerHijo = nil)

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 40: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Ejemplos:

A

C

GF

B

ED

Recorridos:

Preorden (Raiz-Izq-Der): A,B,D,E,C,F,G

Inorden (Izq-Raiz-Der): D,B,E,A,F,C,G

Postorden(Izq-Der-Raiz): D,E,B,F,G,C,A

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 41: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Especificacion

especificacion RECORRIDOS-ARBOLES-BINARIOS[ELEM]usa ARBOLES-BINARIOS[ELEM],LISTAS[ELEM]operaciones

preorden : arbolBin→ listainorden : arbolBin→ listapostorden : arbolBin→ lista

variables

e: elementoiz,de: arbolBin

ecuaciones

preorden(arbolBBV acio) = []preorden(plantar(iz, e, de) = [e] + +(preorden(iz) + +preorden(de))inorden(arbolBBV acio) = []inorden(plantar(iz, e, de) = inorden(iz) + +([e] + +inorden(de))postorden(arbolBBV acio) = []postorden(plantar(iz, e, de) = postorden(iz) + +(postorden(de) + +[e])

fin-especificacion

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 42: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Implementacion:

Operacion

fun preorden(a: arbolBin) dev l: natvar r: listasi es-arbolBBVacio(a) entonces

l← lista− vacia()si no

r ← preorden(hijo− iz(a))aniadir − izq(raiz(a), r)l← concatenar(r, preorden(hijo− de(a))

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 43: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Operacion

fun inorden(a: arbolBin) dev l: natvar r: listasi es-arbolBBVacio(a) entonces

l← lista− vacia()si no

r ← inorden(hijo− iz(a))aniadir − der(r, raiz(a))l← concatenar(r, inorden(hijo− de(a))

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 44: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Operacion

fun postorden(a: arbolBin) dev l: natvar r: listasi es-arbolBBVacio(a) entonces

l← lista− vacia()si no

r ← postorden(hijo− iz(a))l← concatenar(r, postorden(hijo− de(a))aniadir − der(l, raiz(a))

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 45: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Especificacion

especificacion RECORRIDOS-ARBOLES-GENERALES[ELEM]usa ARBOLES-GENERALES[ELEM],LISTAS[ELEM]operaciones

preorden : arbol→ listapostorden : arbol→ listaniveles : arbol→ listafrontera : arbol→ lista (La lista de hodos hojas tomados de izquierda a derecha)

operaciones privadas

preorden− bosque : bosque→ listapostorden− bosque : bosque→ listaniveles− bosque : bosque→ lista− + +− : bosque× bosque→ bosquefrontera− bosque : bosque→ lista

variables

e: elementoa: arbolb, b’: bosque

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 46: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Especificacion

ecuaciones

preorden(plantar(e, b)) = [e] + +preorden− bosque(b)preorden− bosque(bosqueV acio) = []preorden− bosque(aniadirArbol(a, b)) = preorden(a) + +preorden− bosque(b)

postorden(plantar(e, b)) = postorden− bosque(b) + +[e]postorden− bosque(bosqueV acio) = []postorden−bosque(aniadirArbol(a, b)) = postorden(a)++postorden−bosque(b)

niveles(plantar(e, b)) = [e] + +niveles− bosque(b)niveles− bosque(bosqueV acio) = []

niveles− bosque(aniadirArbol(plantar(e, b′), b︸ ︷︷ ︸

Lista de arboles

)) =

[e] + +niveles− bosque(b + +b′)

bosqueV acio + +b = baniadirArbol(a, b′) + +b = aniadirArbol(a, b′ + +b)

fin-especificacion

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 47: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Especificacion

ecuaciones

frontera(plantar(e, bosqueV acio)) = [e]frontera(plantar(e, aniadirArbol(a, b))) =

frontera− bosque(aniadirArbol(a, b))frontera− bosque(bosqueV acio) = []frontera− bosque(aniadirArbol(a, b)) = frontera(a) + +frontera− bosque(b)

fin-especificacion

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 48: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Implementacion:

Operacion

fun preorden(a: arbolGen) dev l: natvar b: bosque, k: listal← unitaria(raiz(a))b← hijos(a)n← longitud(b)desde i=1 hasta n hacer

k ← preorden(consultar(b, i))l← concatenar(l, k)

fin desdefin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 49: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Operacion

fun postorden(a: arbolGen) dev l: natvar b: bosque, k: listal← lista− vacia()b← hijos(a)n← longitud(b)desde i=1 hasta n hacer

k ← postorden(consultar(b, i))l← concatenar(l, k)

fin desdeaniadir − der(l, raiz(a))

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 50: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Operacion

fun frontera(a: arbolGen) dev l: natvar b: bosque, k: listasi es-hoja(a) entonces

l← unitaria(raiz(a))si no

l← lista− vacia()b← hijos(a)n← longitud(b)desde i=1 hasta n hacer

k ← frontera(consultar(b, i))l← concatenar(l, k)

fin desdefin si

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 51: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arboles binariosArboles generales

Operacion

fun niveles(a: arbolGen) dev l: natvar sig, hijo: arbol, b: bosque, c: cola[arbol]si es-hoja(a) entonces

l← unitaria(raiz(a))si no

l← lista− vacia()c← cola− vacia()encolar(a, c)mientras ¬es− cola− vacia(c) hacer

sig ← primero(c))desencolar(c)aniadir − der(l, raiz(sig))b← hijos(sig)n← longitud(b)desde i=1 hasta n hacer

hijo← consultar(b, i)encolar(hijo, c)

fin desdefin mientras

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 52: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Caracterısticas:

Son arboles binarios cuyos nodos almacenan datos entre losque existe una relacion de orden.

Cada nodo es mayor que todos los nodos de su hijo izquierdoy menor que todos los nodos que los de sus hijos derechos.

Permiten acceder a la informacion eficientemente.

Operaciones mas habituales:

BuscarInsertarBorrar

El contenido de cada nodo se utiliza como clave para accedera la informacion asociada.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 53: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Ejemplo: un diccionario.

Para cada palabra un diccionario asocia una informacion → Elnombre de la palabra es la clave.

La clave esta ordenada segun orden alfabetico.

La operacion tıpica es buscar

En nuestro arbol el contenido de los nodos serıa la clave obien la clave mas la informacion.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 54: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Operaciones a considerar:

crear un arbol binario de busqueda vacıo,

insertar un elemento,

determinar si un elemento pertenece al arbol,

consultar el menor elemento,

consultar el mayor elemento,

eliminar un elemento, y

determinar si el arbol es vacıo

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 55: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Especificacion

especificacion ARBOLES-BINARIOS-BUSQUEDA[ELEM]usa BOOLEANOStipos arbolBBoperaciones

arbolBBV acio : arbolBB(constructora)plantar : arbolBB × elemento× arbolBB → arbolBB(constructora)insertar : elemento× arbolBB → arbolBBesta : arbolBB → boolminimo : arbolBB → elementomaximo : arbolBB → elementoeliminar : elemento× arbolBB → arbolBBes− arbolBBV acio? : arbolBB → bool

variables

e, f: elementoiz,de: arbolBB

ecuaciones

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 56: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Especificacion

ecuaciones

plantar(iz, e, dr) = error ⇐ ¬(es− arbolBBV acio(iz) ∨ e >maximo(iz)) ∨ ¬(es− arbolBBV acio(de) ∨ e < minimo(de))

insertar(e, arbolBBV acio) = plantar(arbolBBV acio, e, arbolBBV acio)insertar(e, plantar(iz, e, dr)) = plantar(iz, e, dr)insertar(e, plantar(iz, f, dr)) = plantar(insertar(e, iz), f, dr)⇐ e < finsertar(e, plantar(iz, f, dr)) = plantar(iz, f, insertar(e, de))⇐ e > f

esta(e, arbolBBV acio) = falsoesta(e, plantar(iz, e, dr)) = ciertoesta(e, plantar(iz, f, dr)) = esta(e, iz)⇐ e < festa(e, plantar(iz, f, dr)) = esta(e, dr)⇐ e > f

minimo(arbolBBV acio) = errorminimo(plantar(arbolBBV acio, e, dr) = eminimo(plantar(iz, e, de) = minimo(iz)⇐ ¬es− arbolBBV acio?(iz)

maximo(arbolBBV acio) = errormaximo(plantar(iz, e, arbolBBV acio) = emaximo(plantar(iz, e, de) = maximo(de)⇐ ¬es− arbolBBV acio?(de)

fin-especificacion

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 57: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Especificacion

ecuaciones

eliminar(e, arbolBBV acio) = arbolBBV acioeliminar(e, plantar(iz, e, arbolBBV acio)) = izeliminar(e, plantar(arbolBBV acio, e, de)) = deeliminar(e, plantar(iz, e, dr)) =plantar(iz, minimo(dr), eliminar(minimo(dr), dr))⇐¬es− arbolBBV acio?(iz) ∧ ¬es− arbolBBV acio?(de)eliminar(e, plantar(iz, f, dr)) = plantar(eliminar(e, iz), f, dr)⇐ e < feliminar(e, plantar(iz, f, dr)) = plantar(iz, f, eliminar(e, de))⇐ e > f

es− arbolBBV acio?(arbolBBV acio) = ciertoes− arbolBBV acio?(plantar(iz, e, dr)) = falso

fin-especificacion

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 58: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Representacion: La misma que la de los arboles binarios.

Representacion

tipos

enlace-arbolBB: puntero a nodo-arbolBBnodo-arbolBB : reg

valor: elementoiz,de: enlace-arbolBB

fregarbolBB: enlace-arbolBB

ftipos

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 59: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Operaciones:

Operacion

fun arbolBBVacio() dev a: arbolBBa← nil

fin fun

Operacion

proc insertar(e: elemento, a: arbolBB)si a = nil entonces

reservar(a)a ↑ .valor ← ea ↑ .iz ← nila ↑ .de← nil

si nocasos

e < a ↑ .valor :insertar(e, a ↑ .iz)

e > a ↑ .valor :insertar(e, a ↑ .de)

fin casosfin si

fin proc

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 60: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Operacion

fun plantar(iz: arbolBB, e: elemento, dr: arbolBB) dev a: arbolBBreservar(a)a ↑ .iz ← iza ↑ .de← dea ↑ .valor ← e

fin fun

Operacion

fun esta(e: elemento, a: arbolBB) dev b: boolsi a = nil entonces

b← falsosi no

casose = a ↑ .valor :

b← ciertoe < a ↑ .valor :

b← esta(e, a ↑ .iz)e > a ↑ .valor :

b← esta(e, a ↑ .iz)fin casos

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 61: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Operacion

fun minimo(a: arbolBB) dev e: elementosi a = nil entonces

Error(arbol vacıo)si no

si a ↑ .iz = nil entoncese← a ↑ .valor

si noe← minimo(a ↑ .iz)

fin sifin si

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 62: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Operacion

fun maximo(a: arbolBB) dev e: elementosi a = nil entonces

Error(arbol vacıo)si no

si a ↑ .de = nil entoncese← a ↑ .valor

si noe← maximo(a ↑ .de)

fin sifin si

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 63: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Operacion

proc eliminar(e: elemento, a: arbolBB)var b: arbolBBsi a 6= nil entonces

casose = a ↑ .valor :

casosa ↑ .de = nil :

b← aa← a ↑ .izliberar(b)

a ↑ .iz = nil :b← aa← a ↑ .deliberar(b)

a ↑ .de 6= nil ∧ a ↑ .de 6= nil :eliminar − aux(a, a ↑ .de)

fin casose < a ↑ .valor :

eliminar(e, a ↑ .iz)e > a ↑ .valor :

eliminar(e, a ↑ .de)fin casos

fin sifin proc

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 64: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Operacion

proc eliminar-aux(a,b: arbolBB)var c: arbolBBsi b ↑ .iz 6= nil entonces

eliminar − aux(a, b ↑ .iz)si no

a ↑ .valor ← b ↑ .valorc← bb← b ↑ .deliberar(c)

fin sifin proc

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 65: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

EspecificacionImplementacion

Operacion

fun es-arbolBBVacio(a: arbolBB) dev b: boolb ← (a=nil)

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 66: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Definicion

Un arbol binario es equilibrado en altura si cumple:

la diferencia entre las alturas de sus hijos es como mucho 1, y

ambos estan equilibrados en altura.

Disena un algoritmo que determine si un arbol binario estaequilibrado con la menor complejidad posible.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 67: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Consideremos el calculo de la altura:

Operacion

fun altura(a: arbolBin) dev alt: natsi es− arbolBBV acio(a) entonces

alt← 0si no

alt← 1 + max(altura(hijo− iz(a)), altura(hijo−de(a)))fin si

fin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 68: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

El tiempo de ejecucion es:

T (n) ={

c, si n = 0;T (p) + T (q) + c, si n > 0.

Donde:

n: numero de nodos del arbolp: numero de nodos del hijo izquierdop: numero de nodos del hijo derechop + q + 1 = nCasos:

Caso ”extremo”: q = 1 y p = n− 2. Entonces:

T (n) ={

c, si n = 0;T (1) + T (n− 2), si n > 0.

Caso promedio: q ≈ 12n y p ≈ 1

2n. Entonces:

T (n) ={

c, si n = 0;2T (n/2), si n > 0.

Luego el coste del calculo de la altura es lineal.R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 69: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Operacion

fun equilibrado-1(a: arbolBin) dev eq: boolsi es− arbolBBV acio(a) entonces

eq ← ciertosi no

eq ← equilibrado− 1(hijo− iz(a)) ∧ equilibrado− 1(hijo− de(a)) ∧diferencia(altura(hijo− iz(a)), altura(hijo− de(a)))

fin sifin funfun diferencia(n,m:nat) dev d: nat

si n ≥ m entoncesd← n−m

si nod← m− n

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 70: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

El tiempo de ejecucion es:

T (n) ={

c, si n = 0;T (p) + T (q) + cn, si n > 0.

donde cn proviene de llamar a altura. Luego es Θ(n2).

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 71: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Ineficiencia: equilibrado− 1(hijo− iz(a)) calcula las alturas desus hijos aunque altura(hijo− iz(a) vuelve a hacerlo. Idea clave:Simultaneamente vemos is un arbol esta equilibrado y calculamossu altura:

Operacion

fun equilibrado− 2(a : arbolBin)dev〈eq : bool, alt : nat〉si es− arbolBBV acio(a) entonces〈eq, alt〉 ← 〈cierto, cero〉

si no〈eq − iz, alt− iz〉 ← equilibrado− 2(hijo− iz(a))〈eq − de, alt− de〉 ← equilibrado− 2(hijo− de(a))eq ← eq− iz∧eq−de∧ (diferencia(alt− iz, alt−de) ≤ 1)alt← 1 + max(alt− iz, alt− de)

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 72: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

El tiempo de ejecucion es:

T (n) ={

c, si n = 0;T (p) + T (q) + c, si n > 0.

Luego es Θ(n).

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 73: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Dado un arbol:

Definicion

La distancia entre dos nodos es la longitud del unico camino quelos conecta.

Definicion

El diametro del arbol es la maxima distancia sobre todos los paresde nodos.

Disena un algoritmo de coste lineal que determine el diametro deun arbol binario dado.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 74: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Consideremos el subarbol izquierdo y el derecho:

Si los nodos que estan a la maxima distancia estan en elmismo hijo, el diametro es el mismo que el diametro del hijo.

Si estan de distintos el camino debe pasar por la raız. Paraque el camino sea maximo la distancia debe coincidir con lasuma de las alturas de los dos hijos.

Como no sabemos que alternativa nos lleva a la solucionprobamos las 3:

El camino esta en el hijo izquierdo.El camino esta en el hijo derecho.El camino esta en arbol principal.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 75: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Operacion

fun diametro(a : arbolBin) : 〈diam : ent, alt : nat〉si es− arbolBBV acio(a) entonces〈diam, alt〉 ← 〈−1, 0〉

si no〈diam− iz, alt− iz〉 ← diametro(hijo− iz(a))〈diam− de, alt− de〉 ← diametro(hijo− de(a))diam← max(max(diam−iz, diam−de), alt−iz+alt−de)alt← 1 + max(alt− iz, alt− de)

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 76: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Definicion

Un arbol binario es zurdo si se da alguna de las siguientescondiciones:

es el arbol vacıo,

es un nodo hoja, o

sus hijos izquierdo y derecho son zurdos y mas de la mitad desus descendientes estan en el hijo izquierdo.

Determina si un arbol binario es zurdo con coste lineal.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 77: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Mas de la mitad de los descendientes estan en el hijoizquierdo:

di > di+dd2 ⇔ 2di > de + dd⇔ di > dd

Idea clave: Calculamos simultaneamente si un arbol es zurdoy el numero de hijos.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 78: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Operacion

fun zurdo(a : arbolBin) : 〈zurdo : bool, num : nat〉casos

es− arbolBBV acio(a) :〈zurdo, num〉 ← 〈cierto, 0〉

es− hoja(a) :〈zurdo, num〉 ← 〈cierto, 1〉¬es− arbolBBV acio(a) ∨ ¬es− hoja(a) :〈zur − iz, des− iz〉 ← zurdo(hijo− iz(a))〈zur − de, des− de〉 ← zurdo(hijo− de(a))zurdo← zur − iz ∧ zur − de(des− iz > des− de)num← 1 + des− iz + des− de

fin casosfin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 79: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

a Desarrolla un algoritmo que reconstruya un arbol binario apartir de las dos listas que definien sus recorridos en preordene inorden, suponiendo todos los elementos distintos.

b ¿Es posible reconstruir univocamente el arbol a partir de susrecorridos en inorden y postorden?

c ¿Y con las recorridos en preorden y postorden?

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 80: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Ambas listas poseen el mismo numero de elementos.

El primer elemento de lpre contiene la raız del arbol.

La raız esta en la lista lpre en la posicion k:

Los elementos anteriores a k forman el hijo izquierdo.Los elementos posteriores a k forman el hijo derecho.

¡Los elementos entre 2 y k de lpre son el recorrido en preordenpara subarbol izquierdo! por la recursividad de la definicion derecorrido en preorden.

Lo mismo ocurre con los elementos mayores que k

Idea clave: Aplicar la misma idea a cada recorrido parcial.

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 81: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Funciones auxiliares:

proc coger(n : nat, l : lista)mientras longitud(l) > n hacer

elim− der(l)fin mientras

fin proc

proc tirar(n : nat, l : lista)m← nmientras m > 0 ∧ ¬es− lista− vacia(l) hacer

elim− izq(l)m← m− 1

fin mientrasfin proc

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 82: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Apartado (a)

Operacion

fun reconstruir − 1(lpre, lin : lista) : a : arbolBinvar iz, de : arbolBin, lpre− iz, lpre− de, lin− iz, lin− de : listasi es− lista− vacia(lpre) entonces

a← arbolBBV acio()si no

x← izquierdo(lpre)k ← posicion(x, lin)lpre− iz ← copiar − lista(lpre); eliminar(lpre− iz); coger(k − 1, lpred− iz)lin− iz ← copiar − lista(lin); coger(k − 1, lin− iz)iz ← reconstruir − 1(lpre− iz, lin− iz)lpre− de← copiar − lista(lpre); tirar(k, lpre− de)lin− de← copiar − lista(lin); tirar(k, lin− de)de← reconstruir − 1(lpre− de, lin− de)a← plantar(iz, x, de)anular − lista(lpre− iz)anular − lista(lpre− de)anular − lista(lin− iz)anular − lista(lin− de)

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 83: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Apartado (b)

Operacion

fun reconstruir − 2(lpost, lin : lista) : a : arbolBinvar iz, de : arbolBin, lpost− iz, lpost− de, lin− iz, lin− de : listasi es− lista− vacia(lpost) entonces

a← arbolBBV acio()si no

x← derecho(lpost)k ← posicion(x, lin)lpost− iz ← copiar − lista(lpost); coger(k − 1, lpred− iz)lin− iz ← copiar − lista(lin); coger(k − 1, lin− iz)iz ← reconstruir − 2(lpost− iz, lin− iz)lpost− de← copiar − lista(lpost); eliminar(lpost− de); tirar(k − 1, lpost− de)lin− de← copiar − lista(lin); tirar(k, lin− de)de← reconstruir − 1(lpost− de, lin− de)a← plantar(iz, x, de)anular − lista(lpost− iz)anular − lista(lpost− de)anular − lista(lin− iz)anular − lista(lin− de)

fin sifin fun

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles

Page 84: Trar Boles

Ideas generalesArboles binarios

Arboles generalesRecorridos de arboles

Arboles binarios de busquedaEjemplos y ejercicios

Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas

Apartado (c) Los siguiente arboles poseen el mismo recorrido enpreorden y postorden.

A

B

D∅

A

∅B

∅D

R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles