Upload
madge
View
56
Download
1
Embed Size (px)
DESCRIPTION
Arboles binarios de búsqueda. Elemento estándar: Cuenta. class Cuenta { public: int codigo; char nombreCliente[50]; float saldo; public: Cuenta(); Cuenta(int codi,float saldoInic); int key(); };. Cuenta::Cuenta() { codigo=0; saldo=0.0; nombreCliente[0]='\0'; } - PowerPoint PPT Presentation
Citation preview
Arboles binarios de búsqueda
Elemento estándar: Cuenta
class Cuenta{
public:int codigo;char nombreCliente[50];float saldo;
public:Cuenta();Cuenta(int codi,float saldoInic);int key();
};
Cuenta::Cuenta(){
codigo=0;saldo=0.0;nombreCliente[0]='\0';
}
Cuenta::Cuenta(int codi, float saldoInic){
codigo=codi;saldo=saldoInic;cout<<"Escriba el nombre del cliente: ";cin>>nombreCliente;
}
int Cuenta::key(){
return codigo;}
La clase Nodoclass Nodo{ public:
Cuenta dato; Nodo *hijoIzq; //Apuntador a hijo izquierdo Nodo *hijoDer; //Apuntador a hijo derecho
public: Nodo(Cuenta nDato); //Constructor
};
Nodo::Nodo(Cuenta nDato) //Constructor{
dato = nDato;hijoIzq = NULL;hijoDer = NULL;
}
class ArbolBin{ public:
Nodo *raiz; //Apunta a la raíz del arbol Nodo *actual;
public:ArbolBin(); //Constructorvoid insertar(Cuenta dato);void buscar_lugar(Nodo *r, Cuenta dato);
//Recorridos:void inorden(Nodo *r);void preorden(Nodo *r);void posorden(Nodo *r);
};
La clase ArbolBin
//ConstructorArbolBin::ArbolBin(){
raiz=NULL;actual=NULL;
}
void ArbolBin::insertar(Cuenta dato){if(raiz == NULL) //Si árbol vacío
{raiz = new Nodo(dato); //Crea el nodoactual=raiz; //El nuevo a su vez es el
actual}else //Arbol no vacío
buscar_lugarbuscar_lugar(raiz, dato);}
void ArbolBin::buscar_lugar(Nodo *r, Cuenta dato){
if(r) //Si puntero no nulo{
if( (r->dato).key() > dato.key() ) // Si clave del nuevo es menor // que la clave de r
{if( !r->hijoIzq ) // Si r no tiene hijo izq{ r->hijoIzq =new Nodo(dato); //Lo crea e inserta actual=r->hijoIzq;}else buscar_lugar(r->hijoIzq, dato); //Sigue buscando
}
else if( (r->dato).key() < dato.key()) // Si clave del nuevo es
// mayor que la clave de r{
if(!r->hijoDer) // Si no tiene hijo der{ r->hijoDer =new Nodo(dato); //Lo crea e inserta actual=r->hijoDer;}else buscar_lugar(r->hijoDer, dato); //Sigue buscando
}}else{
cout<<"¡Error! referencia a nodo invalida";}
}
Nótese que si el nuevo está repetido en el árbol, no se inserta
//Recorridos
void ArbolBin::preorden(Nodo *r){
if(r) //Si es no nulo{
cout<<" "<<(r->dato).codigo<<" ";preorden(r->hijoIzq);preorden(r->hijoDer);
}}
void ArbolBin::posorden(Nodo *r){
if(r) //Si es no nulo{
posorden(r->hijoIzq);posorden(r->hijoDer);cout<<" "<<(r->dato).codigo<<" ";
}}
void ArbolBin::inorden(Nodo *r){
if(r) //Si es no nulo{
inorden(r->hijoIzq);cout<<" "<<(r->dato).codigo<<" ";inorden(r->hijoDer);
}}
void main(void){ //Se crea un árbol
ArbolBin miarbol;
//Se crea una cuenta que va a ser insertada en el árbolCuenta cuenta1(20, 1000);miarbol.insertar(cuenta1);
Cuenta cuenta2(10, 2000);miarbol.insertar(cuenta2);
Cuenta cuenta3(30, 5000);miarbol.insertar(cuenta3);
Programa Principal para comprobar el funcionamiento
//Se ha creado un árbol con raíz 20, //hijo izquierdo 10 e hijo derecho 30
//Ahora comprobemos con los recorridos:cout<<endl<<"Inorden: ";miarbol.inorden(miarbol.raiz);//Imprimió 10 20 3010 20 30
cout<<endl<<"Preorden: ";miarbol.preorden(miarbol.raiz);//Imprimió 20 10 3020 10 30
cout<<endl<<"Posorden: ";miarbol.posorden(miarbol.raiz);//Imprimió 10 30 2010 30 20
}