Sunteți pe pagina 1din 7

EJERCICIOS

5) El recorrido en preorden de un determinado árbol binario es: GEAIBMCLDFKJH y en


in-orden es IABEGLDCFMKHJ Resolver:

A) Dibujar el árbol binario.

B) Dar el recorrido en post-orden.

Del siguiente gráfico resolver las preguntas 6 a la 20

6) ¿Qué nodo es la raíz?

7) ¿Qué nodos son los ancestros de K?

8) ¿Qué nodos son los ancestros propios de N?

9) ¿Qué nodos son los descendientes propios de M?

10) ¿Qué nodos son las hojas?

11) ¿Cuál es la altura del nodo C?

12) ¿Cuál es la altura del árbol?

13) ¿Cuál es la profundidad del nodo C?

14) ¿Cuál es el hermano a la derecha de D?

15) ¿Es I hermano a la derecha de F?


16) ¿Está F a la izquierda de J?

17) ¿Está L a la derecha de J?

18) ¿Qué nodos están a la izquierda y a la derecha de J?

19) ¿Cuántos hijos tiene A?

20) Listar los nodos del árbol en pre-orden, post-orden e in-orden.

21) Obtener la secuencia de rotaciones resultante de la inserción del conjunto de


elementos {1,2,3,4,5,6,7,15,14,13,12,11,10,9,8} en un árbol AVL.

22) Inserte las claves en el orden indicado a fin de incorporarlas a un árbol AVL.

1. 10,100,20,80,40,70.
2. 5,10,20,30,40,50,60.

23) Implementar una función no recursiva para recorrer un árbol binario en in-orden.

24) Escribir una función que realice la reflexión de un árbol binario.

25) Escribir una función recursiva que encuentre el número de nodos de un árbol
binario.

26) Escribir una función recursiva que encuentre la altura de un árbol binario.
Solución

5) A)

B) IBAEDLFCHJKMG

6) Rta: El nodo A.

7) Rta: ACJK

8) Rta: AE.

9) Rta: Ninguno.

10) Rta: HILMDPQ.

11) Rta: Altura 3.

12) Rta: La altura de A, es decir, 4

13) Rta: Profundidad 1.

14) Rta: E.

15) Rta: No. No son hermanos pues no tienen el mismo padre.

16) Rta: Si.


17) Rta: No pues es un descendiente.

18) Rta: A la izquierda BFGHI y a la derecha DENPQ.

19) Rta: Tiene 4 hijos: BCDE.

20) Rta: Pre-orden: ABFGHCIJKLMDENPQ.

Post-orden: HGFBILMKJCDPQNEA.

In-orden: HGFBAICLKMJDPNQE.

21) La secuencia de pasos para construir el árbol es la siguiente:

1. Se inserta el número 1 como raíz del árbol.


2. Se inserta el número 2 a la derecha de la raíz.
3. Se inserta el número 3 a la derecha del 2: Rotación simple a la izquierda sobre la
raíz.
4. Se inserta el número 4 a la derecha del 3.
5. Se inserta el número 5 a la derecha del 4: Rotación simple a la izquierda sobre el 3.
6. Se inserta el número 6 a la derecha del 5: Rotación simple a la izquierda sobre el 2
quedando el 4 como nodo raíz.
7. Se inserta el número 7 a la derecha del 6: Rotación simple a la izquierda sobre el 5.
8. Se inserta el número 15 a la derecha del 7.
9. Se inserta el número 14 a la izquierda del 15: Doble rotación derecha-izquierda
sobre 7.
10. Se inserta el número 13 a la derecha del 7: Doble rotación derecha-izquierda sobre
el 6.
11. Se inserta el número 12 a la izquierda del 13: Rotación simple a la izquierda sobre
el 4 quedando el 7 como nodo raíz.
12. Se inserta el número 11 a la izquierda del 12: Rotación simple a la derecha sobre el
13.
13. Se inserta el número 10 a la izquierda del 11: Rotación simple a la derecha sobre el
14.
14. Se inserta el número 9 a la izquierda del 10: Rotación simple a la derecha sobre el
11.
15. Se inserta el número 8 a la izquierda del 9.
22)

23) El código es el siguiente:

/*Fichero: comprobar.c */

#include < pilas.h>


#include < arbolesB.h>
/*---------------------------------------*/

void inordenNR(ArbolB T,void (* EscribirElemento)(void *),int tamano)


{
NodoB nodoActual,aux;
void *et;
Pila p;
int fin;
int faltaHD; /*Indica si falta el hijo derecho*/

p=CrearPila(sizeof(NodoB));
et=malloc(tamano);
if(!et){
.... /*Error:Sin memoria*/
}

aux=NODOB_NULO;
Push(&aux,p);
nodoActual=RaizB(T);
fin=0;
while(!fin){
while(nodoActual!=NODOB_NULO){
Push(&nodoActual,p);
nodoActual=HijoIzqdaB(nodoActual,T);
}
Tope(&nodoActual,p);
Pop(p);
if (nodoActual!=NODOB_NULO){
EtiquetaArbolB(et,nodoActual,T);
(*EscribirElemento)(et);
nodoActual=HijoDrchaB(nodoActual,T);
}
else fin=1;
}

free(et);
DestruirPila(p);
}

24) El código es el siguiente:

void Refleja(ArbolB T)
{
ArbolB Ti,Td;
if(T!=ARBOLB_VACIO){
Ti=PodarHijoIzqdaB(RaizB(T),T);
Td=PodarHijoDrchaB(RaizB(T),T);
Refleja(Ti);
InsertarHijoDrchaB(RaizB(T),Ti,T);
Refleja(Td);
InsertarHijoIzqdaB(RaizB(T),Td,T);
}
}

25) El algoritmo es muy sencillo considerando que el número de nodos de un árbol binario
es el número de nodos del hijo a la izquierda más el de su hijo a la derecha más 1. El código
es el siguiente:

int numero(NodoB n,ArbolB T)


{
if (n==NODOB_NULO)
return 0;
else
return 1+numero(HijoIzqdaB(n,T),T)+numero(HijoDrchaB(n,T),T);
}

Para calcular el número de nodos de un árbol T se haría mediante la llamada


numero(RaizB(T),T).

26) La altura de un árbol T es uno más el máximo de alturas de los subárboles izquierdo y
derecho(La altura de un árbol nulo está indefinida). El código es el siguiente:

#define MAXIMO(a,b) ((a) < (b)?(b):(a))

int altura(NodoN n,ArbolB T)


{
if(n==NODOB_NULO)
return -1;
else
return 1+MAXIMO(altura(HijoIzqdaB(n,T),T),altura(HijoDrchaB(n,T),T));
}

S-ar putea să vă placă și