示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
struct ArbolB<g>::Nodo* ArbolB<g>::Nodo::mayorDeLosMenores(){
	Nodo *aux = hijos[0];
	while(aux->tieneHijos())
		aux = aux->hijos[aux->n];
	return aux;
}