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:
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
gracias
.. lo tomaré en cuenta
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:
Código (cpp) [Seleccionar]
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

Código (cpp) [Seleccionar]
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

