elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / eliminar ancestros de hojas arbol binario c++ en: 15 Agosto 2010, 20:47 pm
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
  1.  TNodoABB *Arbol::ancestros(TNodoABB *arbol,int d)
  2. {
  3. TNodoABB *x;
  4.  if(arbol!=NULL)
  5.  {
  6.      if(d < arbol->getInfo())
  7.          x = ancestros(arbol->getIzq(),d);
  8.      else if(d>arbol->getInfo())
  9.          x = ancestros(arbol->getDer(),d);
  10.  
  11.      return x;
  12.  }
  13.  else return NULL;
  14. }
  15.  
  16.  
  17. ya lo probé y sí funciona luego cuando hago el eliminar se me cae :P ...
  18.  
  19. este es uno de mis intentos
  20.  
  21. bool Arbol::EliminarAncestros(TNodoABB *&A){
  22.    if( A == NULL)
  23.        return false;
  24.    else
  25.        if(Hoja(A) != NULL)
  26.           return EliminarNodo(ancestros(Hoja(A),Hoja(A)->getInfo()));
  27.        else
  28.        {
  29.        EliminarAncestros(Hoja(A->getIzq()));
  30.        EliminarAncestros(Hoja(A->getDer()));
  31.        return true;
  32.        }
  33.  
  34. }

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
  1. bool Arbol::EliminarAncestros(TNodoABB *&A){
  2.    TNodoABB *aux;
  3.    int dato;
  4.  
  5.      if(A->getIzq() == NULL && A->getDer() != NULL && A->getDer()->getDer() == NULL) //si no tiene descendencia izquierda
  6.      {                       //apunto al nodo a eliminar
  7.        aux = A;              //redefino el arbol sin nodo a eliminar
  8.        A = A->getDer();
  9.        delete aux;
  10.        return true;
  11.      }
  12.      else
  13.      {
  14.        if(A->getDer() == NULL && A->getIzq()->getIzq() == NULL) //tiene no tiene descendencia derecha
  15.        {
  16.            aux = A;
  17.            A = A->getIzq();
  18.            delete aux;
  19.            return true;
  20.        }
  21.        else{//el nodo tiene dos descendencias
  22.        if(A->getDer()->getDer() == NULL &&  A->getIzq()->getIzq() == NULL){
  23.         dato = Mayor(A->getIzq());
  24.         A->setInfo(dato);
  25.         return Eliminar(dato, A->getIzq());
  26.         }
  27.  
  28.         else{
  29.          EliminarAncestros(A->getIzq());
  30.          EliminarAncestros(A->getDer());
  31.          return true;
  32.         }
  33.      }
  34.  
  35.      }
  36.  
  37.  
  38.  
  39. }


gracias :D .. lo tomaré en cuenta :)
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines