Sábado 14 de Diciembre de 2024, 17:39
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
[Código Fuente]
Arbol binario
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema:
[Código Fuente]
Arbol binario (Leído 12374 veces)
monsejaz
Nuevo Miembro
Mensajes: 1
[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( num
dato ) 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( num
dato )
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( n
dato ) 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( n
dato )
{ nodo=nodo->Ramaizq;
ban2=0;
}
else{ nodo=nodo->Ramader;
ban2=1;}
}
}
}
Autor: monse
Tweet
danielbs
Nuevo Miembro
Mensajes: 2
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
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
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
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
[Código Fuente]
Arbol binario