#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
struct arbol {
struct arbol *izq;
int clave;
struct arbol *der; };
typedef struct arbol ARB;
typedef ARB *ARBPT;
void inserta(ARBPT *, int);
void menu(void);
void preorden(ARBPT);
void busqueda(ARBPT, int);
main()
{ ARBPT raiz = NULL;
int opcion, clav;
menu();
fflush(stdin);
printf("\n Elige opcion: ");
scanf("%d", &opcion);
while (opcion != 4) {
switch(opcion)
{ case 1 : printf("\n Digita la clave del nodo : ");
scanf("%d", &clav);
inserta(&raiz, clav) ;
break;
case 2 : printf("\n\n Recorrido del arbol en PREORDEN\n\n");
printf("\n ");
preorden(raiz);
printf("\n\n Enter para continuar...");
getch();
break;
case 3 : printf("\n Digita la clave del nodo que quieres buscar : ");
scanf("%d", &clav);
busqueda(raiz, clav) ;
getch();
break;
default : printf("\n\n Opcion no permitida.\n\n");
printf("\n\n Enter para continuar...\n\n");
getch();
menu();
}
menu();
fflush(stdin);
printf("\n Elige opcion: ");
scanf("%d", &opcion);
}
printf("\n Fin del programa.\n\n");
printf("\n Enter para terminar...");
getch();
}
void menu(void)
{ system("cls");
printf("\n\n\n\n"
" OPERACIONES DISPONIBLES CON EL ARBOL: \n\n\n\n"
" 1 INSERTAR UN ELEMENTO AL ARBOL\n\n"
" 2 RECORRER EL ARBOL EN PREORDEN\n\n"
" 3 BUSQUEDA EN EL ARBOL\n\n"
" 4 SALIR DEL PROGRAMA\n\n");
}
void inserta(ARBPT *raiz, int cla)
{ ARBPT aux1, aux2, aux3= NULL;
aux1 = (struct arbol *) malloc(sizeof(struct arbol));
if (aux1 != NULL)
{aux1->clave = cla;
aux1->izq = NULL;
aux1->der = NULL;
aux2 = *raiz;
while (aux2 != NULL)
{aux3 = aux2;
if (cla == aux2->clave)
{ printf("\n\n Clave del nodo duplicado\n");
printf(" No insertado\n");
printf(" Enter para continuar");
getch();
goto salida;
}
if (cla < aux2->clave)
aux2 = aux2->izq;
else
aux2 = aux2->der;
}
if (aux3 == NULL)
*raiz = aux1;
else
{ if (cla == aux3->clave)
{ printf("\n\n Clave del nodo duplicado\n");
printf(" No insertado\n");
printf(" Enter para continuar");
getch();
goto salida;
}
if (cla < aux3->clave)
aux3->izq = aux1;
if (cla > aux3->clave)
aux3->der = aux1;
}
}
else
{ printf("\n Nodo no insertado" );
printf("\n No hay memoria disponible\n\n");
printf("\n Emter para continuar...");
getch();
}
salida:
printf("\n Enter para menu....");
getch();
}
void preorden(ARBPT ap1)
{ ARBPT ap2;
if(ap1 != NULL)
{ printf("\n raiz = %2d ", ap1->clave);
ap2 = ap1->izq;
if (ap2 != NULL)
printf(" izquierdo : %2d", ap2->clave);
else printf(" izquierdo NULO");
preorden(ap2);
ap2= ap1->der;
if (ap2 != NULL)
printf(" derecho : %2d", ap2->clave);
else printf(" derecho NULO");
preorden(ap2);
}
}
void busqueda(ARBPT ap1, int clav)
{
if(ap1==NULL)
{
printf("\nodo no encontrado!");
}
else
{
while(ap1!=NULL)
{
printf("\nRaiz:%i",ap1->clave);
if(ap1->clave==clav)
{
printf("\n\nNodo encontrado:%i",ap1->clave);
ap1=NULL;
}
else
{
if(clav < ap1->clave )
{
ap1=ap1->izq;
printf("Izquierdo: %i",ap1->clave);
}
else
{
ap1=ap1->der;
printf("Derecho: %i",ap1->clave);
}
}
}
}
}

No hay comentarios:
Publicar un comentario