‘Médulo 12. Arboles binarios enhebrados
1, labore un algoritmo para determiner y retomar ol ndmero de hojas de un érbol binario
representado como lista ligada enhebrada,
Solucién:
1, int hojas(nodoDobleEnhedrado r)
2 int hh
3.
4.
5 if (rretomaBi() == 0 and (t.retorraBd() == 0)) then
6 bh=thet
1. else
8. if (cretomaBi() == 1)
9. hh = bh + hojas(-.retornali())
10. endif
Tr if (cretomaBd() == 4
12. bh = bh + hojas(r.retomaLd())
13. endif)
14. endlif...,
15. end(if)
16. retum hh
17. fin(hojas)
Los algoritmos sobre arboles binarios enhebrados son muy similares a los algoritmos en
que el arbol binario no esta enhebrado. La diferencia basica esta en que las llamadas re-
cursivas se deben controlar con los campos de bit de cada nodo. En este nuestro primer
algoritma, con el cual se determina el numero de hojas de un arbol binario representado,
lo hemos desarrollado en forma recursiva con el fin de mostrar el control de las llamadas
recursivas con los campos de bit de cada nodo. Sin embargo, perfectamente se puede
determinar el numero de hojas aplicando la propiedad de que esta enhebrado y usando
la funci6n siguiente para recorrer el arbol y contar las hojas, es decir, los nodos que ten-
gan ambos campos de bit en 0. Dicho algoritmo se presenta a continuacidn.
int hojasEnhebrado(nodoDobleEnhebrado r)
nodoDobleEnhebrado p
int hh =O
p= siguiente(r)
while (p = 1) do
eRena6 if (p.retomaBi() == 0 and (p.retomaBd() == 0)) then
7. hh=hh+1
8. end(if
9. p= siguiente(p)
10. end(while)
n. retum hh
12. fin(hojasnhebrado)
2. Elabore un algoritmo para determinar y retomar el grado de un érbol binario representado
como lista ligada enhebrada,
Solucién:
1. int grado(nodoDobleEnhebrado r)
2 int g
3 geo
4. f (r= raiz) thon
5. if (tretomaBi() == 1 and retomaBd() == 1) then
6. g
7. else
8. 1 or retomaBd(} == 1) then
9.
10.
" en)
12. if (g==2) retum g
13, if (tretomaai() == 1) then
14, g= grado(rretoraLi())
15, ena(if)
16. if (== 2) retun
17, if (tretomaBd() == 1) then
18, 9= grado(r.retomaLdi)}
19, end(if)
2 endl)
24. reum @
22. in(grado)
Fijese que nuestto algoritmo es idéntico al desartolado en las soluciones del médulo
anterior. La dferencia estd en que el conteo del grado y las lamadas recursives estan
condisionadas por los campos de bit. Si usamos la cualided de que est enhebrado,
‘nuesto algoriimo queda asi:
1. int gradoEnhebrado(nodoDobleEnhebrade 1)
2 nodoDebleEnhebrado p
3. int g=0if (pxretomeBi() == 1 and (p.retomaBd() == 1)) return 2
if (rretonaBid) == 1. or rretornaBd() == 1) 9 4
p= siguionie(o)
end(whila)
retumg
‘1. fin(gradoEnhebrado)
3. Elabore un algoritmo para determinary retornar a altura de un érbol binario representado
‘come lista ligada enhebrada,
Soluci6n:
4. int altura(nodoDobleEnhebrado 1)
2 int atizg, altder
3 raiz) return 0
4. altizg = 0
5. 0
6. if (cretomaBid)
1. aliz i)
8. end(i’)
9. if (rretomaBd() == 1) then
10. alider = allura(c.retomaLd())
1 cend(i)
12, if (zg > alder retum aizg + 4
13. retum altder +1
14, finfaltura)
4. Elabore un algoritmo para determinar el padre de un registro en un &rbol binario repre
‘sentado como lista ligada enhebrado en inorden.
Solucién:
1.
2.
3
int padre(int dato)
nodoDobleEnhebrado p, ¢
p= raiz.retomaLi()