Arboles binarios de búsqueda

14
Arboles binarios de búsqueda

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

Transcript of Arboles binarios de búsqueda

Page 1: Arboles binarios  de búsqueda

Arboles binarios de búsqueda

Page 2: 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();

};

Page 3: Arboles binarios  de búsqueda

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;}

Page 4: Arboles binarios  de búsqueda

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;

}

Page 5: Arboles binarios  de búsqueda

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

Page 6: Arboles binarios  de búsqueda

//ConstructorArbolBin::ArbolBin(){

raiz=NULL;actual=NULL;

}

Page 7: Arboles binarios  de búsqueda

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);}

Page 8: Arboles binarios  de búsqueda

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

}

Page 9: Arboles binarios  de búsqueda

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

Page 10: Arboles binarios  de búsqueda

//Recorridos

void ArbolBin::preorden(Nodo *r){

if(r) //Si es no nulo{

cout<<" "<<(r->dato).codigo<<" ";preorden(r->hijoIzq);preorden(r->hijoDer);

}}

Page 11: Arboles binarios  de búsqueda

void ArbolBin::posorden(Nodo *r){

if(r) //Si es no nulo{

posorden(r->hijoIzq);posorden(r->hijoDer);cout<<" "<<(r->dato).codigo<<" ";

}}

Page 12: Arboles binarios  de búsqueda

void ArbolBin::inorden(Nodo *r){

if(r) //Si es no nulo{

inorden(r->hijoIzq);cout<<" "<<(r->dato).codigo<<" ";inorden(r->hijoDer);

}}

Page 13: Arboles binarios  de búsqueda

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

Page 14: Arboles binarios  de búsqueda

//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

}