#include <stdlib.h>
#include <stdio.h>
struct arbol{
struct arbol *izq;
int dato;
struct arbol *der;
};// se declara la estructura albol
typedef struct arbol ARBOL; // se le da un pseudonimo
typedef ARBOL *ARBOLPTR;
void imprimir(ARBOLPTR); // se declaran aplicaciones
void insertar(ARBOLPTR *, int);
void menu(void);
main() // se declara la funcion main
{
ARBOLPTR raiz = NULL;
int opcion, item;
menu();
printf("\n Elige opcion: \n");
scanf("%d",&opcion);
while (opcion != 4){ // se declara el ciclo para repetir menu
switch(opcion)
{ case 1: printf("\n Ingresa el valor : \n");
scanf("%d", &item);
if (encontrarArbol(raiz, item) == 1)
{ printf("\n El numero: %d,ya fue ingresado");
printf("\n ");
printf("\n\n Presiona enter para continuar");
getch();
}
else insertar(&raiz, item);
break;
case 2: if (raiz == NULL)
{ printf("\nEsta vacio ingresa un numero primero");
}
else imprimir(raiz);
printf("\n\nEnter para continuar\n");
getch();
break;
case 3: printf("Digite el elemento a buscar: \n");
scanf ("%d", &item);
if (encontrarArbol(raiz, item) == 0)
printf("no se encuentra el valor\n");
else
printf ("El valor %d esta en el nivel:",item);
imprimir (raiz);
getch();
break;
default : printf("opcion invalida \n\n");
getch();
menu();
}
menu();
printf("\nElige opcion: ");
scanf("%d",&opcion);
}
getch();
}
void menu(void)
{ system("cls");
printf("\n\t" " *******OPERACIONES DISPONIBLES EN EL ARBOL*****\n\n\n"
" 1 INSERTA UN ELEMENTO\n"
" 2 IMPRIMIR EL ARBOL\n"
" 3 BUSQUEDA \n"
" 4 SALIR DEL PROGRAMA\n");
}
int encontrarArbol(ARBOLPTR aux, int valor)//esta funcion permita buscar
{ while (aux != NULL) //un numero en la lista
{ if (valor < aux->dato)
{ aux = aux->izq;
continue;}// vuelve entrar a while mientars aux sea diferente de uno
if (valor > aux->dato)
{ aux = aux->der;
continue;}
if (valor == aux->dato)
return 1;
}
return 0;
}
void insertar(ARBOLPTR *raiz, int valor)
{ ARBOLPTR aux1, aux2, aux3= NULL;
aux1 = (ARBOLPTR) malloc(sizeof(ARBOL));//busca un area de memoria que tenga la estructura de arbol
if (aux1 != NULL)
{aux1->dato = valor;//asigna el valor
aux1->izq = NULL;// asigna nulo
aux1->der = NULL;// asigna nulo
aux2 = *raiz;// se le va asignar el valor de la variable que esta apuntada por raiz
while (aux2 != NULL)
{aux3 = aux2;
if (valor < aux2->dato)// si es menor se va por el else
aux2 = aux2->izq;
else
aux2 = aux2->der;// se le asigna al propio aux2
}
if (aux3 == NULL)// no es nulo se va por raiz
*raiz = aux1;
else
{if (valor < aux3->dato)
aux3->izq = aux1;
else
aux3->der = aux1;
}
}
}
void imprimir(ARBOLPTR aux1)
{ ARBOLPTR aux2;
if (aux1 != NULL) // si el apuntador aux1 es diferente a nulo va imprimir el caracter asiganado
{printf("\n\n raiz= %d", aux1->dato);
aux2= aux1->izq;
if (aux2 != NULL)
printf("\tizquierdo: %d", aux2->dato);
else printf("\tizquierdo NULO");
imprimir(aux2);
aux2= aux1->der;
if (aux2 != NULL)
printf("\tderecho: %d", aux2->dato);
else printf("\tderecho NULO");
imprimir(aux2);
}
}
No hay comentarios:
Publicar un comentario