Vous êtes sur la page 1sur 9
‘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 eRena 6 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=0 if (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()

Vous aimerez peut-être aussi