Mensajes [1] - Enviado el Lunes 18 de Agosto de 2008 a las 22:51hs
Tengo un trabajo en C++ que requiere usar arboles en C... pero no entiendo muy bien asi q necesito ayuda!!!
Se tiene que sistematizar las cuentas bancarias de un banco separadas en dos ?rboles binarios ordenados en un ?rbol binario ordenado se gurdar?n las cuentas en colones y en el otro la cuentas en dolares... cada uno d los ?rboles debe estar ordenado por el n?mero de cuenta. de cada cuenta se guarda el numero de cuenta, si es dolares o colones, el saldo y el nombre del cliente. Se requiere poder crear los dos arboles, insertar de manera ordenada cuentas a los dos arboles, buscar una cuenta en uno de los arboles dado su numero, buscar una cuenta en uno de los arboles por el nombre del cliente, cambiar el saldo de una cuenta en uno d los arboles por el numero de cuenta y los arboles se tienen q imprimir en inorden. Se debe verificar todos los datos con la libreria assert y tener parametros por referencia, metods constantes y metodos inline y aparte un menu donde se puedan manejar con facilidad las opciones antes mencionadas....
si alguien m puede dar aunque sea una idea se lo agradezco demasiado de antemano!!! y si m hacen el codigo d una vez mucho mejor!!!! MUCHAS GRACIAS!!!!
Mensajes [10] - Enviado el Jueves 04 de Setiembre de 2008 a las 13:17hs
buenas yo ya trabaj? con arboles binarios en c++ con estructuras no con clases, y con arboles binarios de busqueda, avl, B en pascal, tengo el codigo de los binarios en c++ pero para q es es eso es profesional? o q onda?
bueno ahi encontr? el c?digo
//Funcion o Opreciones De ABB
#include
#include "conio.h"
#include "arbol.h"
void InicializarABB(pArbol &A)
{
A=NULL;
}
//MOVIMIENTO EN ABB
void MostrarDato(int Dato)
{
printf("
%d",Dato);
}
void InOrden(pArbol &A)
{
if(A!=NULL)
{
InOrden(A->izq);
MostrarDato(A->Dato);
InOrden(A->der);
}
}
void PreOrden(pArbol &A)
{
if(A!=NULL)
{
MostrarDato(A->Dato);
PreOrden(A->izq);
PreOrden(A->der);
}
}
void PosOrden(pArbol &A)
{
if(A!=NULL)
{
PosOrden(A->izq);
PosOrden(A->der);
MostrarDato(A->Dato);
}
}
//INFORMACION DE ABB
int ArbolVacio(pArbol &A)
{
if(A==NULL)
return 1;
else
return 0;
}
int EsHoja(pArbol &A)
{
if((A->der==NULL)&&(A->izq==NULL))
return 1;
else
return 0;
}
void NumerosDeNodos(pArbol &A, int &x)
{
if(A!=NULL)
{
x++;
NumerosDeNodos(A->izq,x);
NumerosDeNodos(A->der,x);
}
}
int CantidadDeNodos(pArbol &A)
{
int Cantidad=0;
if(A!=NULL)
NumerosDeNodos(A,Cantidad);
return Cantidad;
}
int AlturaDeUnNodo(pArbol &A, int x)
{
int Altura=0;
Nodo Aux=A;
while(Aux!=NULL)
{
if(x==Aux->Dato)
return Altura;
else
{
Altura++;
if(x>Aux->Dato)
Aux=Aux->der;
else
Aux=Aux->izq;
}
}
if(Altura==0)
return 1;
return Altura;
}
void VaciarABB(pArbol &A)
{
if(A!=NULL)
{
VaciarABB(A->izq);
VaciarABB(A->der);
delete(A);
}
A=NULL;
}
int AlturaArbol(pArbol &A)
{
int AltDer=0,AltIzq=0;
if(A==NULL)
return -1;
else
{
AltIzq=AlturaArbol(A->izq);
AltDer=AlturaArbol(A->der);
if(AltIzq>AltDer)
AltIzq=AltIzq+1;
else
AltIzq=AltDer+1;
}
return AltIzq;
}
//OPRECIONES EN ABB
int BuscarMenorEnABB(pArbol &A)
{
Nodo Aux=A;
if(Aux!=NULL)
{
while(Aux->izq!=NULL)
Aux=Aux->izq;
}
return (Aux->Dato);
}
int BuscarMayorEnABB(pArbol &A)
{
Nodo Aux=A;
if(Aux!=NULL)
{
while(Aux->der!=NULL)
Aux=Aux->der;
}
return (Aux->Dato);
}
int BuscarElementoEnABB(pArbol &A, int x) // 1: Encontado, 0: No Existe
{
Nodo Aux=A;
if(Aux!=NULL)
{
if(Aux->Dato==x)
return 1;
else
{
if(Aux->Dato>x)
BuscarElementoEnABB(Aux->izq,x);
if(Aux->Dato
}
}
return 0;
}
int InsertarNodoEnArbol(pArbol &A, int x)
{
int bandera=0;
pArbol Aux,Padre;
Aux=A;
Padre=NULL;
while((Aux!=NULL)&&(Aux->Dato!=x))
{
Padre=Aux;
if(Aux->Dato>x)
Aux=Aux->izq;
else
if(Aux->Dato
}
if(Aux==NULL)
{
Aux=new Arbol;
Aux->Dato=x;
Aux->der=NULL;
Aux->izq=NULL;
if(Padre!=NULL)
{
if(Padre->Dato>x)
Padre->izq=Aux;
else
Padre->der=Aux;
bandera=1;
}
else
{
A=Aux;
bandera=1;
}
}
return bandera;
}
int EliminarNodoEnABB(pArbol &A, int x)
{
pArbol Aux;
if(A!=NULL)
{
Aux=A;
if(Aux->Dato==x)
{
if(EsHoja(Aux))//Es hoja
{
delete(Aux);
A=NULL;
return(1);
}
else
{
if(A->izq!=NULL)
{
Aux=Aux->izq;
while(Aux->der!=NULL)
Aux=Aux->der;
A->Dato=Aux->Dato;
Aux->Dato=x;
EliminarNodoEnABB(A->izq,x);
}
else
{
Aux=Aux->der;
while(Aux->izq!=NULL)
Aux=Aux->izq;
A->Dato=Aux->Dato;
Aux->Dato=x;
EliminarNodoEnABB(A->der,x);
}
}
}
else
if(A->Dato>x)
EliminarNodoEnABB(A->izq,x);
else
EliminarNodoEnABB(A->der,x);
}
else
return 0;
}
int PodaABB(pArbol &A, int x)
{
pArbol Aux;
int Bandera;
if(A!=NULL)
{
Aux=A;
if(Aux->Dato==x)
{
Aux->der=NULL;
Aux->izq=NULL;
Bandera=1;
}
else
{
if(Aux->Dato>x)
PodaABB(Aux->izq,x);
else
{
if(Aux->Dato<=x)
PodaABB(Aux->der,x);
}
}
}
else
Bandera=0;
return Bandera;
}
tom? el .h tambi?n
struct Arbol{
int Dato;
Arbol *izq;
Arbol *der;
};
typedef Arbol* pArbol;
typedef Arbol* Nodo;
void InicializarABB(pArbol &A);
void InOrden(pArbol &A);
void PreOrden(pArbol &A);
void PosOrden(pArbol &A);
int ArbolVacio(pArbol &A);
int EsHoja(pArbol &A);
void NumerosDeNodos(pArbol &A, int &x);
int CantidadDeNodos(pArbol &A);
int AlturaDeUnNodo(pArbol &A, int x);
void VaciarABB(pArbol &A);
int AlturaArbol(pArbol &A);
int BuscarMenorEnABB(pArbol &A);
int BuscarMayorEnABB(pArbol &A);
int BuscarElementoEnABB(pArbol &A, int x);
int InsertarNodoEnArbol(pArbol &A, int x);
int EliminarNodoEnABB(pArbol &A, int x);
int PodaABB(pArbol &A, int x);
avisame si te sirvi? :D
la librer?a assert nunca la us? q tal es buena?
y para implementarlos como clases hacelos vos q sale facil es algo as?
class ABB {
private:
?elto * e;
?ABB *hizq, *hder;
public:
?ABB();
?ABB(elto * e);
?void InOrden();
?void PreOrden();
?void PosOrden();
?int ArbolVacio();
?int EsHoja();
?int CantidadDeNodos();
?int AlturaDeUnNodo(int x);
?void VaciarABB();
?int AlturaArbol();
?int BuscarMenorEnABB();
?int BuscarMayorEnABB();
?int BuscarElementoEnABB(int nro_cuenta);
?int InsertarNodoEnArbol(elto Cuenta);
?int EliminarNodoEnABB(int nro_cuanta);
};
esa es la idea sale facil el paso a clases cualquier cosa avisame no es dificil si hiciste alguna clase lista o algo por el estilo
bueno nos vemos lina