sip, eres pesado.. pero gracias cierto me faltaron más comentarios pero si puse y conozco el uso de //
/**/
/**/
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú TNodoABB *Arbol::ancestros(TNodoABB *arbol,int d)
{
TNodoABB *x;
if(arbol!=NULL)
{
if(d < arbol->getInfo())
x = ancestros(arbol->getIzq(),d);
else if(d>arbol->getInfo())
x = ancestros(arbol->getDer(),d);
return x;
}
else return NULL;
}
ya lo probé y sí funciona luego cuando hago el eliminar se me cae :P ...
este es uno de mis intentos
bool Arbol::EliminarAncestros(TNodoABB *&A){
if( A == NULL)
return false;
else
if(Hoja(A) != NULL)
return EliminarNodo(ancestros(Hoja(A),Hoja(A)->getInfo()));
else
{
EliminarAncestros(Hoja(A->getIzq()));
EliminarAncestros(Hoja(A->getDer()));
return true;
}
}
bool Arbol::EliminarAncestros(TNodoABB *&A){
TNodoABB *aux;
int dato;
if(A->getIzq() == NULL && A->getDer() != NULL && A->getDer()->getDer() == NULL) //si no tiene descendencia izquierda
{ //apunto al nodo a eliminar
aux = A; //redefino el arbol sin nodo a eliminar
A = A->getDer();
delete aux;
return true;
}
else
{
if(A->getDer() == NULL && A->getIzq()->getIzq() == NULL) //tiene no tiene descendencia derecha
{
aux = A;
A = A->getIzq();
delete aux;
return true;
}
else{//el nodo tiene dos descendencias
if(A->getDer()->getDer() == NULL && A->getIzq()->getIzq() == NULL){
dato = Mayor(A->getIzq());
A->setInfo(dato);
return Eliminar(dato, A->getIzq());
}
else{
EliminarAncestros(A->getIzq());
EliminarAncestros(A->getDer());
return true;
}
}
}
}