Descargar la presentación
La descarga está en progreso. Por favor, espere
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);
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.