SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: monsejaz en Sábado 3 de Diciembre de 2005, 19:26

Título: Arbol binario
Publicado 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
Título: oeeeee...
Publicado por: danielbs en Martes 10 de Julio de 2007, 01:51
amigo disculpa k tipos de librerias usaste...??? ... x fa enviame al correo da_ba_sa@hotmail.com se te agredecera muxo shauuuuuuu
Título: Duda con librerías usadas
Publicado por: ACL en Miércoles 20 de Octubre de 2010, 04:33
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.
Título: AYUDA
Publicado por: gurenhaguen en Viernes 26 de Noviembre de 2010, 07:14
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