Documentos de Académico
Documentos de Profesional
Documentos de Cultura
(Leccin 16)
Implementacin esttica
Representacin basada en cursores a los
hijos Representacin de rboles en base a vectores
el elemento que contiene Los ndices donde se encuentran sus hijos izq y der
Implementacin esttica
constante max = ... {mximo nmero de elementos almacenables} Tipo arbin : 0..max; {el 0 significa rbol vaco} nodo = registro dato:elemento; izq,der:arbin; ocupado:booleano freg; tpVectorDeNodos = vector[1..max] de nodo; variable a: arbin; vector_nodos:tpVectorDeNodos
{un mismo vector puede incluso almacenar varios rboles}
Implementacin esttica
a
1
vector_nodos
Implementacin dinmica
Encadenamiento mediante punteros de los
elementos del rbol
Cmo quedar representado el siguiente rbol?
freg
{operacin plantar}
ecuaciones iz,de:arbin; e:elemento raz(e<iz,de>) = e subIzq(e<iz,de>) = iz subDer(e<iz,de>) = de vaco?() = verdad vaco?(e<iz,de>) = falso (vaco?(iz))(vaco?(de)) altura(e<iz,de>) = 0 (vaco?(iz)) (vaco?(de)) altura(e<iz,de>) = suc(altura(de)) (vaco?(iz)) (vaco?(de)) altura(e<iz,de>) = suc(altura(iz)) (vaco?(iz)) (vaco?(de)) altura(e<iz,de>) = suc(max(altura(iz),altura(de))) fespec
Implementacin dinmica
mdulo rbolesBinarios importa defTipoElemento exporta tipo arbin algoritmo vaco(sal a:arbin) {Post: a=vaco} algoritmo plantar(ent e:elemento; ent ai,ad:arbin; sal a:arbin) {Post: a=plantar(e,ai,ad)} funcin raz(a:arbin) devuelve elemento {Pre: avaco} {Post: raz(a)=raz(a)} algoritmo subIzq(ent a:arbin; sal ai:arbin) {Pre: avaco} {Post: ai=Izq(a)} algoritmo subDer(ent a:arbin; sal ad:arbin) {Pre: avaco} {Post: ad=Der(a)} funcin esVaco(a:arbin) devuelve booleano {Post: esVaco(a)=esVaco(a)} funcin altura(a:arbin) devuelve natural {Pre: avaco} {Post: altura(a)=alt(a)}
Implementacin dinmica
. algoritmo asignar(sal nuevo:arbin; ent viejo:arbin) {Duplica la representacin del rbol viejo guardndolo en nuevo.} algoritmo liberar(e/s a:arbin) {Libera la memoria dinmica accesible desde a, quedando a vaco.}
implementacin tipos arbin = nodo; nodo = registro dato: elemento; izq,der: arbin freg .
Implementacin dinmica
algoritmo vaco (sal a:arbin) principio a:=nil fin algoritmo plantar (ent e:elemento; ent ai,ad:arbin; sal a:arbin) principio nuevoDato(a); a.dato:=e; a.izq:=ai; a.der:=ad fin funcin raz (a:arbin) devuelve elemento principio devuelve(a.dato) fin
Implementacin dinmica
algoritmo subIzq(ent a:arbin; sal ai:arbin) principio ai:=a.izq {No crea copia del subrbol! Devuelve un puntero al subrbol} fin algoritmo subDer(ent a:arbin; sal ad:arbin) principio ad:=a.der {No crea copia del subrbol! Devuelve un puntero al subrbol} fin funcin esVaco(a:arbin) devuelve booleano principio devuelve(a=nil) fin
Implementacin dinmica
funcin altura(a:arbin) devuelve natural funcin max(a,b:0..maxEntero) devuelve 0..maxEntero {funcin mximo de dos enteros} principio si ab entonces devuelve(a) sino devuelve(b) fsi fin principio seleccin (a.izq=nil) and (a.der=nil): devuelve(0); (a.izq=nil) and (a.dernil): devuelve(1+altura(a.der)); (a.izqnil) and (a.der=nil): devuelve(1+altura(a.izq)); (a.izqnil) and (a.dernil): devuelve(1+max(altura(a.der),altura(a.izq))) fseleccin fin
Implementacin dinmica
algoritmo asignar(sal nuevo:arbin; ent viejo:arbin) variables ai,ad:arbin principio si viejo=nil entonces nuevo:=nil sino asignar(ai,viejo.izq); asignar(ad,viejo.der); nuevoDato(nuevo); nuevo.dato:=viejo.dato; nuevo.izq:=ai; nuevo.der:=ad fsi fin
Implementacin dinmica
algoritmo liberar(e/s a:arbin) principio si anil entonces liberar(a.izq); liberar(a.der); disponer(a); a:=nil fsi fin fin {Fin del modulo rbolesBinarios}
Implementacin dinmica
Coste de las operaciones de la especificacin:
, _<_,_> (plantar), raz, subIzq, subDer, vaco? coste (1)
tipos arbin = nodo; nodo = registro altura: 0..maxEntero; dato: elemento; izq,der: arbin freg
fin algoritmo anchura(ent a:arbin) principio si a<>nil entonces nivelesSub(a,0) fsi fin