Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Temas - monsejaz
Páginas: [1]
1
« en: Sábado 3 de Diciembre de 2005, 19:26 »
//arboles #include #include #include #include #include #include #include typedef struct arbol { int dato; struct arbol *Ramaizq; struct arbol *Ramader; }Nodo;
enum{ FALSO=0, VERDADERO };
Nodo *raiz; Nodo *temp; Nodo *nuevo; Nodo *aux; Nodo *aux2; Nodo *aux3; Nodo *elim; int conta=1; int con=1,c=0; int ban,ban2; int num, mayor; int hoja=0; int hijo,B; int num2; int bandera=1; char op,op2; int cont=0; int c1,c2,c3,n;
int vacio( struct arbol *hoja ); int busqueda( struct arbol *hoja, int num ); void menu_busquedas(); void Insertar() ; void Preorden(struct arbol*); void Inorden(struct arbol*); void Postorden(struct arbol*); void Hojas(struct arbol*, int&); void niveles(struct arbol*, int&); void padrehijo(struct arbol*,int); // capturas el padre y t dice quienes son sus hijos void hermano(struct arbol*,int); struct arbol *borrarx( struct arbol *hoja, int num ); int val; void main() { int op; do { clrscr(); cout<<"1)Insertar"<cout<<"2)Inorden"<cout<<"3)Postorden"<cout<<"4)Preorden"<cout<<"5)Niveles"<cout<<"6)Hojas"<cout<<"7)Busqueda"<cout<<"8)Eliminar"<cout<<"9)Hijos de Padre"<cout<<"10)hermano"<cout<<"11)Salir"<cout<<"Elige una opcion: "<cin>>op;
if(op==1) { Insertar();}
if(op==2) { clrscr(); cout<<"Datos:"<Inorden(raiz); getch(); } if(op==3) { clrscr(); cout<<"Datos:"<Postorden(raiz); getch(); }
if(op==4) { clrscr(); cout<<"Datos:"<Preorden(raiz); getch(); }
if(op==5) { clrscr(); conta=0; mayor=0; niveles(raiz, conta); cout<<"Niveles: "<getch();}
if(op==6) { c=0; Hojas(raiz,c); cout<<"Numero de hojas: "<getch(); }
if(op==7) { if(vacio(raiz)) { printf( "\n\nEl Arbol Aun esta Vacio." ); getch(); }else{ menu_busquedas(); }}
if(op==8) { cout<<"\n\nNumero: "; cin>>val; borrarx(raiz,val); cout<<"\n.... Borrado ...."; getch(); } if(op==9) { cout<<"\n\n padree Numero: "; cin>>n; padrehijo(raiz,n); getch(); } if(op==10) { cout<<"\n\n hermano Numero: "; cin>>n; hermano(raiz,n); getch(); }
}while(op!=11); getch(); }
void Insertar() { clrscr(); char op2; do { cout<<"Inserta un numero: "<cin>>num; if(raiz==NULL) { raiz=(arbol *)malloc(sizeof(arbol)); raiz->dato=num; raiz->Ramaizq=NULL; raiz->Ramader=NULL; } else { temp=(arbol*)malloc(sizeof(arbol)); temp=raiz; ban=0;
while (ban==0) { nuevo=(arbol*)malloc(sizeof(arbol)); nuevo->dato=num; nuevo->Ramaizq=NULL; nuevo->Ramader=NULL; if (temp->dato > nuevo->dato) { if(temp->Ramaizq!=NULL) temp=temp->Ramaizq; else { temp->Ramaizq=nuevo; ban=1; } } else { if(temp->Ramader!=NULL) temp=temp->Ramader; else { temp->Ramader=nuevo; ban=1; } } } } cout<<"Deseas insertar otro numero: [s/n] "<cin>>op2; }while(op2!='n'); getch(); }
void Inorden(arbol *nodo) { if(nodo !=NULL) { Inorden(nodo->Ramaizq); cout<dato<Inorden(nodo->Ramader); } } void Postorden(arbol *nodo) { if(nodo !=NULL) { Postorden(nodo->Ramaizq); Postorden(nodo->Ramader); cout<dato<} } void Preorden(arbol *nodo) { if (nodo!=NULL) { cout<dato<Preorden(nodo->Ramaizq); Preorden(nodo->Ramader); } } void Hojas(arbol *nodo, int &c) { if (nodo!=NULL) {
Hojas(nodo->Ramaizq,c); Hojas(nodo->Ramader,c); if ((nodo->Ramaizq==NULL) && (nodo->Ramader==NULL))c++; }
} void niveles (arbol *nodo, int &conta) { if (nodo!=NULL) { conta=conta+1; niveles(nodo->Ramaizq, conta); niveles(nodo->Ramader,conta); if ((nodo->Ramaizq==NULL) && (nodo->Ramader==NULL)) if (conta > mayor) { mayor=conta; conta=0; } } }
int busqueda( struct arbol *hoja, int num ) { while( hoja ) { if( num==hoja->dato ) return VERDADERO; else { if( numdato ) hoja= hoja->Ramaizq; else hoja= hoja->Ramader; } } return FALSO; }
void menu_busquedas() { // int val;
cout<<"\n introduce el Numero a BUscar: "; cin>>val; if( busqueda( raiz, val ) ) cout<<"\n\nEncontrado.." ; else cout<<"\n\nError, No se encuentra." ; getch(); }
int vacio( struct arbol *hoja ) { if( !hoja ) return VERDADERO; return FALSO; }
struct arbol *borrarx( struct arbol *hoja, int num ) { if( hoja->dato==num ) { struct arbol *p, *p2;
if( vacio( hoja ) ) { free( hoja ); hoja= NULL; return hoja; } else if( hoja->Ramaizq==NULL ) { p= hoja->Ramader; free( hoja ); return p; } else if( hoja->Ramader==NULL ) { p= hoja->Ramaizq; free( hoja ); return p; } else { p= hoja->Ramader; p2= hoja->Ramader; while( p->Ramaizq ) p= p->Ramaizq; p->Ramaizq= hoja->Ramaizq; free( hoja ); return p2; } } else if( numdato ) hoja->Ramaizq= borrarx( hoja->Ramaizq, num ); else hoja->Ramader= borrarx( hoja->Ramader, num ); return hoja; }
void padrehijo(arbol *nodo,int n) { bandera=1; while((nodo!=NULL)&&(bandera==1)) { if( n==nodo->dato) { aux=nodo; aux2=nodo; aux=aux->Ramader; aux2=aux2->Ramaizq; if(nodo->Ramader!=NULL) {cout<<"\nhijo "<dato; } if(nodo->Ramaizq!=NULL) {cout<<"\nhijo "<dato; } bandera=0;} else { if( ndato ) nodo=nodo->Ramaizq; else nodo=nodo->Ramader; } } }
void hermano(arbol *nodo,int n) { bandera=1; ban2=3; while((nodo!=NULL)&&(bandera==1)) { if( n==nodo->dato) { if(ban2==0) { if(aux3->Ramader!=NULL) { aux3=aux3->Ramader; cout<<"\n hermano "<dato;} } if(ban2==1) {if(aux3->Ramaizq!=NULL) { aux3=aux3->Ramaizq; cout<<"\n hermano "<dato;} } bandera=0;} else {aux3=nodo; if( ndato ) { nodo=nodo->Ramaizq; ban2=0; } else{ nodo=nodo->Ramader; ban2=1;} } } }
Autor: monse
Páginas: [1]
|