Está en la página 1de 3

Clase Practica N1

1. Escribir una funcin que devuelva el nmero de nodos de un rbol binario. El algoritmo de
la funcin recursiva puede ser la siguiente:

funcion nodos(arbol : tipoArbol) : devuelve entero;


inicio
si arbol = vacio entonces devolver 0;
en otro caso devolver (1 + nodos(subarbol_izq) + nodos(subarbol_der));
fin

Datos de Ejemplo, para la corrida del programa.

8 , 4 , 5 , 7 , 9 , 6 , 1 , 2 , 3 , 4 , 5 , 6 , 1 , 8 , 9 , 12

2. El recorrido en preorden de un determinado rbol binario es: GEAIBMCLDFKJH y en


inorden IABEGLDCFMKHJ

Resolver:

a) Dibujar el rbol binario.

b) Dar el recorrido en postorden.

c) Disear una funcin para dar el recorrido en postorden dado el recorrido en preorden e
inorden y escribir un programa para comprobar el resultado del apartado anterior.

Las soluciones son las siguientes:

A) El rbol correspondiente es el de la siguiente figura:


B)El recorrido en postorden es IBAEDLFCHJKMG.

C)El cdigo solucin al tercer apartado es el siguiente:


/*Fichero: comprobar.c */

#include < stdio.h>


#include < stdlib.h>
#include < string.h>

char *preorden="GEAIBMCLDFKJH";
char *inorden="IABEGLDCFMKHJ";
char *postorden;

/*---------------------------------------*/

void post(char *pre,char *in,char *pos,int n)


{
int longIzqda;

if(n!=0){
pos[n-1]=pre[0];
longIzqda=strchr(in,pre[0])-in;
post (pre+1,in,pos,longIzqda);
post (pre+1+longIzqda,in+1+longIzqda,pos+longIzqda,n-1-longIzqda);
}
}

/*----------------------------------------*/

int main(int argc,char *argv[])


{
int aux;

aux=strlen(preorden);
postorden=(char *)malloc(aux*sizeof(char));
if (postorden){
printf("El preorden es: %s\n",preorden);
printf("El inorden es: %s\n",inorden);
post(preorden,inorden,postorden,aux);
postorden[aux]='\0';
printf("El postorden calculado es: %s\n",postorden);
free(postorden);
}
else{
fprintf(stderr,"Error: Sin memoria\n");
return 1;
}

return 0;
}