#include <cstdlib>
#include <iostream>
#include <conio.c>
#include <iomanip>
using namespace std;
struct base
{
char let; struct base* izq; struct base* der; } *raiz, *aux; void InOrden(struct base* puntero);
void PreOrden(struct base* ptr);
void PostOrden(struct base* ptr);
void Recorrido(struct base* ptr);
void Otro();
int Agregar(char letra, struct base* puntero);
char Acepta (void);
int main(int argc, char *argv[])
{
int Opcion = 0;
while (Opcion != 6)
{
system("CLS");
cout<<"\t \t \t UNIVERSIDAD MARIANO GALVEZ \n \n";
cout<<"\t \t Proyecto Final Estructura De Datos \n";
cout<<"\t \t Carlos Rolando Calan Ajquill Junio/2006 \n";
cout<<"\t \t Carne: 0910-04-13429 5to. Semestre \n";
cout<<"\t \t ---------------------------------------------\n";
cout<<"\t \t Arbol Binario y recorrido del mismo \n ";
cout<<"\t \t ---------------------------------------------\n\n";
cout<<"\t 1.- Ingreso de datos al Arbol \n";
cout<<"\t 2.- Recorrer el Arbol \n";
cout<<"\t 3.- Recorrido del Arbol en INORDEN \n";
cout<<"\t 4.- Recorrido del Arbol en PREORDEN \n";
cout<<"\t 5.- Recorrido del Arbol en POSTORDEN \n";
cout<<"\t 6.- Salir \n";
cout<<"\t ------------------------------------------------\n";
cout<<"\t \t Seleccione una opcion \t";
cin>>Opcion;
cout<<"\n";
switch (Opcion)
{
case 1:
cout<<"OPCION 1: Ingresar Datos \n";
Otro();
break;
case 2:
cout<<"OPCION 2: Recorre Arbol \n";
Recorrido(raiz);
getch();
break;
case 3:
cout<<"OPCION 3: Recorrido INORDEN \n";
InOrden(raiz);
getch();
break;
case 4:
cout<<"OPCION 4: Recorrido PREORDEN \n";
PreOrden(raiz);
getch();
break;
case 5:
cout<<"OPCION 5: Recorrido POSTORDEN \n";
PostOrden(raiz);
getch();
break;
case 6:
system("CLS");
cout<<"Hecho por Carlos Rolando Calán Ajquill, hasta pronto ......\n\n";
break;
default:
cout;
cout<<"Opcion Invalida \n\n";
break;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
void Otro()
{
char c;
while ((c = Acepta()) != 's')
{
if (Agregar(c, raiz))
break;
}
}
char Acepta(void)
{
char c;
cout<<"Pulse un carácter, Para salir 's' -> \t";
while (1)
{
c = getchar();
if (c == 10) continue;
return c;
}
}
int Agregar(char letr, struct base* ptr)
{
if (raiz == NULL)
{
raiz = (struct base*) malloc(sizeof(base));
if (raiz == NULL)
{
cout<<"NO hay memoria suficiente!!" ;
cout;
return 1;
}
raiz->let = letr;
raiz->izq = raiz->der = NULL;
return 0;
}
if (letr == ptr->let)
return 0;
if (letr < ptr->let)
{
if (ptr->izq == NULL)
{ aux = (struct base*) malloc(sizeof(base));
if (aux == NULL)
{
cout << "NO queda suficiente memoria";
return 1;
}
aux->let = letr;
aux->izq = aux->der = NULL;
ptr->izq = aux;
return 0;
}
if (Agregar(letr, ptr->izq))
return 1; }
if (letr > ptr->let)
{
if (ptr->der == NULL)
{ aux = (struct base*) malloc(sizeof(base));
if (aux == NULL)
{
cout << "NO queda suficiente memoria";
return 1;
}
aux->let = letr;
aux->izq = aux->der = NULL;
ptr->der = aux;
return 0;
}
if (Agregar(letr, ptr->der)) return 1; }
return 0;
}
void InOrden(struct base* ptr)
{
if (ptr == NULL)
return;
InOrden(ptr->izq);
cout<<" - "<<ptr->let;
InOrden(ptr->der);
}
void Recorrido(struct base* ptr)
{
if (ptr == NULL)
return;
Recorrido(ptr->izq);
cout<<" - "<<ptr->let;
Recorrido(ptr->der);
}
void PreOrden(struct base* ptr)
{
if (ptr == NULL)
return;
cout<<" - "<<ptr->let;
PreOrden(ptr->izq);
PreOrden(ptr->der);
}
void PostOrden(struct base* ptr)
{
if (ptr == NULL)
return;
PostOrden(ptr->izq);
PostOrden(ptr->der);
cout<<" - "<<ptr->let;
}

