Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arboles N Arios
Arboles N Arios
(Lecciones 15 y 17)
Definicin recursiva:
Un rbol n-ario (con n1) es un conjunto no vaco de
elementos del mismo tipo tal que: Existe un elemento destacado llamado raz del rbol el resto de los elementos se distribuyen en m subconjuntos
disjuntos (0 m n ), llamados subrboles del rbol original, cada uno de los cuales es a su vez un rbol n-ario
Especificacin Algebraica
espec rbolesOrdenados usa booleanos,naturales parmetro formal gnero elmto fpf gneros bosque, rbol operaciones [ ]: > bosque +dch: bosque rbol > bosque
long: bosque > nat parcial _[_]: bosque nat > rbol parcial resto: bosque > bosque {=el bosque menos el 1er rbol} plantar: elmto bosque > rbol .
Generadora de rbol (cnj. libre)
Especificacin Algebraica
raz: rbol > elmto bosq: rbol > bosque parcial subrbol: rbol nat > rbol numHijos: rbol > nat hoja?: rbol > bool altBosque: bosque > nat altrbol: rbol > nat dominios de definicin b:bosque; i:nat; e:elmto; a:rbol b[i] est definido slo si (1i)(ilong(b)) resto(+dch(b,a)) subrbol(plantar(e,b),i) def. slo si (1i)(ilong(b))
..
Especificacin Algebraica
ecuaciones b:bosque; a:rbol; i:nat; e:elmto long([ ]) = 0 long(+dch(b,a)) = suc(long(b)) i=suc(long(b)) > +dch(b,a)[i] = a isuc(long(b)) > +dch(b,a)[i] = b[i] resto(+dch([ ],a)) = [ ] resto(+dch(+dch(b,a1),a2)) = +dch(resto(+dch(b,a1)),a2) ..
Especificacin Algebraica
raz(plantar(e,b)) = e bosq(plantar(e,b)) = b subrbol(plantar(e,b),i) = b[i] numHijos(plantar(e,b)) = long(b) hoja?(a) = (numHijos(a) = 0) altBosque([ ]) = 0 altBosque(+dch(b,a)) = max(altBosque(b),altrbol(a)) hoja?(a) > altrbol(a) = 0 not hoja?(a) > altrbol(a) = suc(altBosque(bosq(a))) fespec
Recorrido en post-orden:
1
A1
An
El recorrido en anchura de un rbol consiste en visitar todos los elementos del rbol una sola vez, de la forma:
primero se visitan los elementos del nivel 0, luego los del nivel 1, y as sucesivamente, En cada nivel, se visitan los elementos de izquierda a derecha
N+1
An
N+1
Raz
1
An
A1 preBosque([ ]) = [ ] preBosque(+dch(b,a)) = preBosque(b) & preorden(a) preorden(plantar(e,b)) = +izq(e,preBosque(b)) postBosque([ ]) = [ ] postBosque(+dch(b,a) = postBosque(b) & postorden(a) postorden(plantar(e,b)) = +dch(postBosque(b),e)
fespec
Nota: [ ] bosque vaco +dch operacin para arboles [] lista de elementos vaca +dch, +izq operaciones de listas
Implementacin Dinmica
Representacin Primognito - sig. Hermano
Implementacin Tipos rbol = nodo; nodo = registro dato:elemento; primognito,sigHermano:rbol freg; bosque = rbol
algoritmo creaVaco(sal b:bosque) principio b:=nil Fin algoritmo aadeDch(e/s b:bosque; ent a:rbol) variable aux:bosque principio si b=nil entonces b:=a sino aux:=b; mientrasQue aux.sigHermanonil hacer aux:=aux.sigHermano fmq; aux.sigHermano:=a fsi fin
.
algoritmo bosq(ent a:rbol; sal b:bosque) principio b:=a.primognito fin algoritmo subrbol(ent a:rbol; ent i:1..maxEntero; sal sa:rbol) variable b:bosque principio
bosq(a,b); observa(b,i,sa)
Fin funcin numHijos(a:rbol) devuelve 0..maxEntero variable b:bosque principio bosq(a,b); devuelve(long(b)) Fin .
algoritmo postBosque(ent b:bosque; sal l:lista) variable primerrbol:rbol; rb:bosque principio si long(b)0 entonces observa(b,1,primerrbol); postOrden(primerrbol,l); resto(b,rb); postBosque(rb,l) fsi Fin algoritmo postOrden(ent a:rbol; sal l:lista) variable b:bosque principio bosq(a,b); postBosque(b,l); aadeDch(l,raz(a)) Fin Fin {fin del modulo}
Definiciones
Un rbol n-ario se dice homogneo si todos sus
subrboles excepto las hojas tienen n hijos. Un rbol es completo cuando todas sus hojas tienen la misma profundidad Un rbol se dice casi-completo cuando se puede obtener a partir de un rbol completo eliminando hojas consecutivas del ltimo nivel, comenzando por la que est ms a la derecha
Otras implementaciones
Implementacin esttica (ver leccin 17):