Capturas:
Codigo:
ArbolAVL.cpp
#include#include #include #include #include "ArbolAVL.h" using namespace std; int main() { arbol A; tarbol b; char nombre[50]; char telefono[10]; char direccion[50]; char email[50]; char op; int t; do{ fflush(stdin); system("cls"); cout<<"\tMenu\n\n"; cout<<"\t1- Agregar\n"; cout<<"\t2- Buscar\n"; cout<<"\t3- Eliminar\n"; cout<<"\t4- Mostrar\n"; cout<<"\t5- Estadistica\n"; cout<<"\t6- Salir\n\n"; cout<<"Ingrese la opcion: "; cin>>op; fflush(stdin); switch(op) { case '1': { fflush(stdin); system("cls"); cout<<"\nIngrese Nombre: "; gets(nombre); fflush(stdin); do{ cout<<"\nIngrese Telefono 0000-0000: "; gets(telefono); fflush(stdin); t=strlen(telefono); }while(t!=9); cout<<"\nIngrese Direccion: "; gets(direccion); fflush(stdin); cout<<"\nIngrese Email: "; gets(email); fflush(stdin); A.insertar(A.miarbolito,nombre,telefono,direccion,email); break; } case '2':{ fflush(stdin); system("cls"); cout<<"\nNombre: "; gets(nombre); fflush(stdin); b=A.buscar(A.miarbolito,nombre); if(b!=NULL) { fflush(stdin); system("cls"); cout<<"\nContacto encontrado:"; cout<<"\n\nNombre: "< nombre; cout<<"\nTelefono: "< telefono; cout<<"\nEmail: "< email; cout<<"\nDireccion: "< direccion; system("pause"); } break; } case '3':{ system("cls");fflush(stdin); cout<<"\nNombre: "; gets(nombre); fflush(stdin); A.borrar(A.miarbolito,nombre); system("pause"); break; } case '4':{ system("cls"); cout<<"\n\n"; A.IDN(A.miarbolito);system("pause"); break; } case '5':{ system("cls"); A.pe=0; cout<<"\nNumero de contactos: "<nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-insertar="">Izdo,nom,tel,dir,em); } else { if(strcmpi(nom,aux->nombre)>0) { insertar(aux->Dcho,nom,tel,dir,em); } } } } tarbol arbol::buscar(tarbol aux,char nom[50]) { if (aux==NULL) { return NULL; } else { if (strcmpi(nom,aux->nombre)==0) { return aux; } else { if (strcmpi(nom,aux->nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-buscar="" data-blogger-escaped-return="">Izdo, nom); } else { return buscar(aux->Dcho, nom); } } } } void arbol::borrar(tarbol &aux,char nom[50]) { if (aux==NULL) { cout<<"contacto no encontrado no encontrado !!\n\n"; } else {if (strcmpi(nom,aux->nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-borrar="">Izdo, nom); } else { if (strcmpi(nom,aux->nombre)>0) { borrar(aux->Dcho,nom); } else { tarbol temp=aux; if (aux->Izdo== NULL) { aux = aux->Dcho; } else { if (aux->Dcho == NULL) { aux = aux->Izdo; } else { actualizar(temp,temp->Izdo); } delete temp; } } } } } void arbol::actualizar(tarbol &temp, tarbol &aux) { if(aux->Dcho!=NULL) { actualizar(temp,aux->Dcho);} else { strcpy(temp->nombre,aux->nombre); strcpy(temp->telefono,aux->telefono); strcpy(temp->email,aux->email); strcpy(temp->direccion,aux->direccion); temp=aux; aux=temp->Izdo; } } void arbol::IDN( tarbol aux) { if(aux!=NULL) { IDN(aux->Izdo); if(strcmpi(aux->nombre,"M")!=0) { cout<<"Nombre: "<< aux->nombre<<" "< telefono<<" "< email<<" "< direccion<<" "< Dcho); } } int arbol::Peso( tarbol aux) { if(aux!=NULL) { pe++; Peso(aux->Izdo); Peso(aux->Dcho); return pe; } else { return -1; } } int arbol::maximo(int a, int b) { if(a > b) return a; else return b; } int arbol::altura(tarbol &aux) { if(aux) return aux->eq; else return -1; } void arbol::balance (tarbol &aux, char nom[50]) { if (aux) { if (strcmpi(nom,(aux)->nombre)>0) {balance(aux->Dcho,nom); } else {if (strcmpi(nom,(aux)->nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-balance="">Dcho,nom); } } int fe=altura(aux->Dcho)-altura(aux->Izdo); switch (fe) { case -2: { if (altura(aux->Izdo->Izdo) > altura(aux->Izdo->Dcho)) RII(aux); else RID(aux); break; } case 2: { if (altura(aux->Dcho->Dcho) > altura(aux->Dcho->Izdo)) RDD(aux); else RDI(aux); break; } default: aux->eq = maximo(altura(aux->Izdo),altura(aux->Dcho)) +1; } } } void arbol::RII(tarbol &aux){ tarbol n1=aux->Izdo; aux->Izdo=n1->Dcho; n1->Dcho=aux; aux=n1; n1 = aux->Dcho; if(n1) n1->eq = maximo(altura(n1->Izdo),altura(n1->Dcho))+1; aux->eq = maximo(altura(aux->Izdo),altura(aux->Dcho))+1; } void arbol::RDD(tarbol &aux){ tarbol temp; temp=aux->Dcho; aux->Dcho=temp->Izdo; temp->Izdo=aux; aux=temp; temp = aux->Izdo; if(temp) temp->eq = maximo(altura(temp->Izdo),altura(temp->Dcho))+1; aux->eq = maximo(altura(aux->Izdo),altura(aux->Dcho))+1; } void arbol::RID(tarbol &aux){ RDD(aux->Izdo); RII(aux); } void arbol::RDI(tarbol &aux){ RII(aux->Dcho); RDD(aux); }
ArbolAVL.h
#includeclass nodo{ public: char nombre[50]; char telefono[10]; char direccion[50]; char email[50]; int eq; nodo *Izdo, *Dcho; nodo(char nom[50],char tel[10],char dir[50],char em[50], nodo *Iz=NULL, nodo *Dr=NULL,int t=0){ strcpy(nombre,nom); strcpy(telefono,tel); strcpy(direccion,dir); strcpy(email,em); eq=t; Izdo=Iz; Dcho=Dr; } class arbol; }; typedef nodo *tarbol; class arbol{ public: tarbol miarbolito; int pe; int a; arbol(){ miarbolito=NULL; pe=0; a=0; } void insertar(tarbol &aux,char nom[50],char tel[10],char dir[50],char em[50]); tarbol buscar(tarbol aux,char nom[50]); void borrar(tarbol &aux,char nom[50]); void actualizar(tarbol &temp, tarbol &aux); void balance(tarbol &aux, char nom[50]); int maximo(int a, int b); void IDN(tarbol aux); void RDD(tarbol &aux); void RDI(tarbol &aux); void RID(tarbol &aux); void RII(tarbol &aux); int Peso(tarbol aux); int altura(tarbol &aux); };
puedes descargar el proyecto desde aquí.