arbol_t *removerBalanceado(arbol_t *arbol, int valor){
arbol_t *a, *b;
int cont;
if(!arbol)
return NULL;
if(arbol->contenido > valor)
arbol->iz = removerBalanceado(arbol->iz,valor);
else if(arbol->contenido < valor)
arbol->der->contenido = removerBalanceado(arbol->der,valor);
else{ //Si es igual, osea, si encontre el nodo a remover
if(arbol->der == NULL){
if(arbol->iz == NULL)
return NULL; //Si no hay hijo iz ni der devuelvo null
return arbol->iz; //si no hay hijo der pero si iz devuelvo subarbol iz
}
else{
a = menor(arbol->der);
cont = a->contenido;
b = rastreaAnterior(a); //busco el que apuntaba a aux para ponerlo en null
b->iz = NULL; //se que es el izquierdo pq cuando busco el menor siempre va a estar a la iz
free(a
); //Libero a, osea, remuevo el nodo a remover return b; //Devuelvo b que es el nodo que apuntaba
}
}
arbol->contenido = cont;
}