18. IMPLEMENTACION bool BuscarMeterODividir(ArbolB *A, Generico clave, ArbolB *PaginaSubir, Generico *ClaveSuribr, Generico_fnComparar fn){ Pagina *PagEncontrada; if(ArbolB_EstaVacio(*A)){ //Rebota la clave y la pagina a subir(NULL) *PaginaSubir = NULL; *ClaveSubir = clave; return(TRUE); } PagEncontrada = BuscarClaveEnPag(A, clave, &pos, fn); if(PagEncontrada) return FALSE; //No se permiten claves repetidas //Como no la encontre, bajar por el arbol por la rama adecuada Propagar = BuscarDividiryMeter(A->Ramas[pos],clave,PaginaSubir,ClaveSubir, fn); if(Propagar){ //Si hay que propagar, hay que intentar meter la clave en esta pagina if(A->nclaves < A->orden-1){ MeterClaveEnPagina(A, ClaveASubir, PaginaSubir,pos); return(FALSE); else{ Dividir(A, ClaveSubir, PaginaSuibr, pos); return(TRUE); } } }
24. IMPLEMENTACION bool BuscarEliminaroFusionar(ArbolB *A, Generico clave, Generico_fnComparar fn) ArbolB PagEncontrada; ArbolB *sucesor; if(ArbolB_EstaVacio(*A)){ //La clave no existe return(FALSE); } PagEncontrada = BuscarClaveEnPag(*A, I, &pos, ,fn); if(PagEncontrada){ //Si esta en la pagina, eliminar if(ArbolB_EsHoja(*A)){ Remover(*A,pos); return(A->Ramas[pos].nclaves < min); } else{ sucesor = InterCambiarConSucesor(A,pos); Propagar = BuscarEliminaroFusionar(sucesor, clave, fn); } } else //Si no esta en la pagina, seguir bajando en el arbol por la rama correcta Propagar = BuscarEliminaroFusionar(A->Ramas[pos], I); if(Propagar) //Si hay que propagar, arreglar la pagina para prestar clave y fusionar if(!EsHoja(A)) && A->Ramas[pos].nclaves < min) return(Arreglar(A, pos )); } }