SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: monsejaz 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
-
amigo disculpa k tipos de librerias usaste...??? ... x fa enviame al correo da_ba_sa@hotmail.com se te agredecera muxo shauuuuuuu
-
Amigo me gustaría saber a mí también que tipo de librerías usaste para poder aprender más sobre este lenguaje además de que me serviría de guía para un programa que estoy haciendo como proyecto en una materia de la Facultad. Si pudieras enviarme el código fuente a mi e-mail con las librerías usadas me ayudarás muchísimo y te lo agradeceré bastante.
Te dejo mi e-mail:
alex_cyberuser@hotmail.com
Te agradezco de antemano tu atención.
-
HOLA AMIGO AL IGUAL QUE LOS DOS APRENDICES DE PROGRAMACION DE ARRIBA YO TAMBIEN LO SOY Y ESTOY TRATANDO DE HACER UN PROYECTO PARECIDO AL DE TUS ARBOLES... QUISIERA VER SI ME PUEDE AYUDAR ENVIANDOME LAS LIBRERIAS QUE USASTE YA QUE LO INTENTE ARREGLAR PERO ME SIGUE FALLANDO TAL VEZ SEA POR LA AUSENCIA DE UNA LIBRERIA.
ESTE ES MI MAIL
activewar19@hotmail.com
DE ANTEMANO GRACIAS