Hola, estoy teniendo problemas a la hora de implementar ese método...
Se supone que tengo un arbol por ejemplo
50
40 70
35 65
se supone que si aplico el método, el arbol quedaría así:
50
35 65
estaba intentando hacer algo así
hacer un método que sacara los ancestros:
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;
}
}
x.x pero aún no lo logro....
si alguien fuese tan amable de darme una luz acerca de como hacerlo se lo agradecería
Lh: No hagas doble post, utiliza el botón modificar. Utiliza la etiqueta GeSHi para poner código.ya lo logré
wiiiii jijiji
acá les dejó el código para cuando alguien lo ocupe
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;
}
}
}
}
gracias
.. lo tomaré en cuenta