>nombreCliente; } int Cuenta::key() { return codigo; }"> >nombreCliente; } int Cuenta::key() { return codigo; }">

La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Arboles binarios de búsqueda. Elemento estándar: Cuenta class Cuenta { public: int codigo; char nombreCliente[50]; float saldo; public: Cuenta(); Cuenta(int.

Presentaciones similares


Presentación del tema: "Arboles binarios de búsqueda. Elemento estándar: Cuenta class Cuenta { public: int codigo; char nombreCliente[50]; float saldo; public: Cuenta(); Cuenta(int."— Transcripción de la presentación:

1 Arboles binarios de búsqueda

2 Elemento estándar: Cuenta class Cuenta { public: int codigo; char nombreCliente[50]; float saldo; public: Cuenta(); Cuenta(int codi,float saldoInic); int key(); };

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

4 La clase Nodo class 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; }

5 class ArbolBin { public: Nodo *raiz; //Apunta a la raíz del arbol Nodo *actual; public: ArbolBin(); //Constructor void 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

6 //Constructor ArbolBin::ArbolBin() { raiz=NULL; actual=NULL; }

7 void ArbolBin::insertar(Cuenta dato) { if(raiz == NULL) //Si árbol vacío { raiz = new Nodo(dato); //Crea el nodo actual=raiz;//El nuevo a su vez es el actual } else //Arbol no vacío buscar_lugar buscar_lugar(raiz, dato); }

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

9 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

10 //Recorridos void ArbolBin::preorden(Nodo *r) { if(r) //Si es no nulo { cout dato).codigo<<" "; preorden(r->hijoIzq); preorden(r->hijoDer); }

11 void ArbolBin::posorden(Nodo *r) { if(r) //Si es no nulo { posorden(r->hijoIzq); posorden(r->hijoDer); cout dato).codigo<<" "; }

12 void ArbolBin::inorden(Nodo *r) { if(r) //Si es no nulo { inorden(r->hijoIzq); cout dato).codigo<<" "; inorden(r->hijoDer); }

13 void main(void) { //Se crea un árbol ArbolBin miarbol; //Se crea una cuenta que va a ser insertada en el árbol Cuenta 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

14 //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); 10 20 30 //Imprimió 10 20 30 cout<<endl<<"Preorden: "; miarbol.preorden(miarbol.raiz); 20 10 30 //Imprimió 20 10 30 cout<<endl<<"Posorden: "; miarbol.posorden(miarbol.raiz); 10 30 20 //Imprimió 10 30 20 }


Descargar ppt "Arboles binarios de búsqueda. Elemento estándar: Cuenta class Cuenta { public: int codigo; char nombreCliente[50]; float saldo; public: Cuenta(); Cuenta(int."

Presentaciones similares


Anuncios Google