La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Cont. Arbol Binario de Búsqueda

Presentaciones similares


Presentación del tema: "Cont. Arbol Binario de Búsqueda"— Transcripción de la presentación:

1 Cont. Arbol Binario de Búsqueda

2 Algoritmo para hallar el padre de un nodo
Se agrega a la clase ArbolBin las siguientes definiciones: Nodo *buscarPadre(int dato); Nodo *padre(Nodo *r, int key);

3 Implementación Nodo *ArbolBin::buscarPadre(int key) {
if( ! raiz) return NULL; //Si árbol vacío if( key == raiz->dato.key() ) //Si el buscado es la raíz cout<<"El dato no tiene padre ya que es la raíz"; return NULL; } else //Búsqueda del padre return padre(raiz, key);

4 Nodo *ArbolBin::padre(Nodo *r, int key)
{ if( r->hijoIzq && (key < r->dato.key()) ) /* Si tiene hijo izquierdo no nulo y la clave del buscado es menor que la clave de r */ if( (r->hijoIzq)->dato.key()==key ) /*Si el hijo de la izquierda es el buscado entonces r es el padre */ return r; else return padre( r->hijoIzq, key ); //Seguir buscando… }

5 else if( r->hijoDer && (key > r->dato.key()) )
/*Si tiene hijo derecho no nulo y la clave del buscado es mayor que la clave de r */ { if( (r->hijoDer)->dato.key()==key ) /* Si el hijo de la derecha es el buscado entonces r es el padre */ return r; else return padre( r->hijoDer, key); } cout<<"Hijo no encontrado"; //En caso de no encontrarlo return NULL;

6 En el main(): //Prueba del algoritmo para búsqueda del padre:
Nodo *mipadre; mipadre = miarbol.buscarPadre(20); if(!mipadre) cout<< "Dato no hallado o es la raíz del árbol"<<endl; else cout << (mipadre ->dato).codigo; mipadre = miarbol.buscarPadre(10); mipadre = miarbol.buscarPadre(30);

7 Ahora se verá un algoritmo no recursivo para ver si un dato está o no en el árbol,
Se agrega a la clase ArbolBin las siguientes definiciones: Nodo *findkey(int key); Nodo *buscar_dato(Nodo *r, int key);

8 Implementación: Nodo *ArbolBin::findkey(int key) {
return buscar_dato(raiz, key); } En este caso findkey es simplemente una función “de paso” que traspasa el control a la función buscar_dato enviandole la raíz del árbol

9 Nodo *ArbolBin::buscar_dato(Nodo *r, int key)
{ while (r!=NULL) if( (r->dato).key()==key ) //Si lo encuentra actual = r; return r; } else if( (r->dato).key()>key ) //Si key es menor que la clave de r r= r ->hijoIzq; else r = r ->hijoDer; return NULL; //No lo encontró

10 En el main(): //Prueba del algoritmo de búsqueda Nodo *buscado;
buscado=miarbol.findkey(10); if(!buscado) cout <<"Dato no está en el árbol"<< endl; else cout << "El saldo de la cuenta es:" << buscado->dato.saldo; buscado=miarbol.findkey(20); buscado=miarbol.findkey(80);


Descargar ppt "Cont. Arbol Binario de Búsqueda"

Presentaciones similares


Anuncios Google