Menú

Mostrar Mensajes

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ú

Mensajes - Lain SEL

#1
sip, eres pesado.. pero gracias  ;D cierto me faltaron más comentarios pero si puse y conozco el uso de //
/**/  :silbar:
#2
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:

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é :D
wiiiii jijiji  ;D
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 :D .. lo tomaré en cuenta :)