• Sábado 14 de Diciembre de 2024, 17:39

Autor Tema: [Código Fuente] Arbol binario  (Leído 12374 veces)

monsejaz

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
[Código Fuente] Arbol binario
« en: Sábado 3 de Diciembre de 2005, 19:26 »
0
//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

danielbs

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
oeeeee...
« Respuesta #1 en: Martes 10 de Julio de 2007, 01:51 »
0
amigo disculpa k tipos de librerias usaste...??? ... x fa enviame al correo da_ba_sa@hotmail.com se te agredecera muxo shauuuuuuu

ACL

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Duda con librerías usadas
« Respuesta #2 en: Miércoles 20 de Octubre de 2010, 04:33 »
0
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.

gurenhaguen

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
AYUDA
« Respuesta #3 en: Viernes 26 de Noviembre de 2010, 07:14 »
0
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