bool ArbolB<g>::remove(int valor){ Nodo *aux = raiz; while(aux) if(aux->remove(valor)){ if(aux->tieneHijos()) aux = aux->mayorDeLosMenores(); rebalancear(aux); --n; return true; }else aux = aux->getSon(valor); return false; }
bool ArbolB<g>::insert(int valor){ Nodo *aux = raiz; while(aux){ if(!aux->tieneHijos()){ if(aux->insert(valor)){ rebalancear(aux); ++n; return true; }else return false; }else { aux = aux->getSon(valor); if(!aux) return false; } } raiz = new (nothrow) Nodo(valor, NULL); if(!raiz) throw NoHayMemoria(); ++n; return true; }
void ArbolB<g>::imprimirNiveles(){ Cola<Nodo*> nodos; int enEsteNivel = 0, saltarLineaEn = 1, conteo = 0; nodos.encolar(raiz); Nodo *actual; while(!nodos.estaVacia()){ actual = nodos.sacar(); cout<<"|"; for(int i=0; i<actual->n; ++i) cout<<actual->infos[i]<<","; cout<<"\b|;"; if(actual->tieneHijos()) { enEsteNivel+= actual->n+1; for(int i=0; i<=actual->n; ++i) nodos.encolar(actual->hijos[i]); } if(++conteo == saltarLineaEn){ cout<<endl; saltarLineaEn = enEsteNivel; conteo = enEsteNivel = 0; } } cout<<endl; }
struct ArbolB<g>::Nodo* ArbolB<g>::Nodo::mayorDeLosMenores(){ Nodo *aux = hijos[0]; while(aux->tieneHijos()) aux = aux->hijos[aux->n]; return aux; }