//crea un arbol binario y lo recorre en
//preorden, inorden, y en posorden
#include {stdio.h}
#include {stdlib.h}
#include {time.h}
//estructura autorreferenciada
struct nodoArbol {
struct nodoArbol *ptrIzq ; //apuntador al subarbol izquierdo
int dato ; //valor del nodo
struct nodoArbol *ptrDer ;
} ; //fin de la estructura nodoArbol
typedef struct nodoArbol NodoArbol ; //sinonimo de la estructura nodoArbol
typedef NodoArbol *ptrNodoArbol ; //sinonimo de NodoArbol*
//prototipos
void insertaNodo( ptrNodoArbol *ptrArbol, int valor ) ;
void inOrden( ptrNodoArbol ptrArbol ) ;
void preOrden( ptrNodoArbol ptrArbol ) ;
void posOrden( ptrNodoArbol ptrArbol ) ;
//la funcion main comienza la ejecucion del programa
int main()
{
int i ; //contador para el ciclo 1 a 10
int elemento ; //variable para almacenar valores al azar
ptrNodoArbol ptrRaiz = NULL ; //arbol inicialmente vacio
srand ( time( NULL ) ) ;
printf("Los numeros colocados en elarbol son:\n") ;
//inserta valores al azar entre 1 y 15 en el arbol
for( i = 1 ; i <= 10 ; i++ ) {
elemento = rand() % 15 ;
printf("%3d",elemento) ;
insertaNodo( &ptrRaiz, elemento) ;
}
//recorre el arbol en preorden
printf("\n\nEl recorrido en preorden es:\n") ;
preOrden( ptrRaiz ) ;
//recorre el arbol en inorden
printf("\n\nEl recorrido en inorden es:\n") ;
preOrden( ptrRaiz ) ;
//recorre el arbol en posorden
printf("\n\nEl recorrido en posorden es:\n") ;
preOrden( ptrRaiz ) ;
printf("\n\n") ;
system("PAUSE") ;
return 0 ; //indica termonacion exitosa
}//fin del main
//inserta un nodo dentro del arbol
void insertaNodo( ptrNodoArbol *ptrArbol, int valor )
{
//si el arbol esta vacio
if( *ptrArbol == NULL ){
*ptrArbol = malloc( sizeof( NodoArbol ) ) ;
//si la memoria esta asignada, entonces asigna el dato
if( *ptrArbol != NULL ){
(*ptrArbol )->dato = valor ;
(*ptrArbol )->ptrIzq = NULL ;
(*ptrArbol )->ptrDer = NULL ;
}//fin del if
else{
printf("no se inseto %d. No hay memoria disponible. \n",valor) ;
}//fin del else
}//fin del if
else{//el arbol no esta vacio
//el dato a insertar es menor que el dato en el nodo actual
if( valor < ( *ptrArbol )-> dato ){
insertaNodo( &( ( *ptrArbol)->ptrIzq ), valor ) ;
}//fin del if
//el dato a insertar es mayor que el dato en el nodo actual
else if( valor > ( *ptrArbol )->dato ){
insertaNodo( &( ( *ptrArbol)->ptrDer ), valor ) ;
}// fin del else if
}//fin del else
}//fin de la funcion insertaNodo
//comienza el recorrido de la funcion inOrden
void inOrden( ptrNodoArbol ptrArbol ){
//si el arbol no esta vacio, entonces recorrelo
if( ptrArbol != NULL ){
inOrden( ptrArbol->ptrIzq ) ;
printf("%3d",ptrArbol->dato) ;
inOrden( ptrArbol->ptrDer ) ;
}//fin del if
}//fin de la funcion inOrden
//comienza el recorrido de la funcion preOrden
void preOrden( ptrNodoArbol ptrArbol ){
//si el arbol no esta vacio, entonces recorrelo
if( ptrArbol != NULL ){
printf("%3d",ptrArbol->dato) ;
preOrden( ptrArbol->ptrIzq ) ;
preOrden( ptrArbol->ptrDer ) ;
}//fin del if
}//fin de la funcion preOrden
//comienza el recorrido de la funcion posOrden
void posOrden( ptrNodoArbol ptrArbol ){
//si el arbol no esta vacio, entonces recorrelo
if( ptrArbol != NULL ){
posOrden( ptrArbol->ptrIzq ) ;
posOrden( ptrArbol->ptrDer ) ;
printf("%3d",ptrArbol->dato) ;
}//fin del if
}//fin de la funcio posOrden
lunes, 26 de noviembre de 2007
ReCoRrIdOdEuNaRbOl
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario