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
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
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