Categorías > Lenguajes > C++ > Insertar ...
Nuevo Mensaje | Responder
AdrianSeg


53 envíos
Desconectado
1747 lecturas
1 respuestas
Insertar19-06-2010 a las 18:59:54

Te cuento, después de insertar un elemento cuando intento meter otro me dice que ya está listado Y no es posible porque tienen cifs diferentes




Código Fuente:
void insABB(TABB &a, TCliente e, TError &error)
  {
    if(a != NULL)
    {
        if(a -> raiz.cif < e.cif)
        {
          insABB(a -> dch, e, error);
        }
        else
        {
          if(a -> raiz.cif > e.cif)
          {
              insABB(a -> izq, e, error);
          }
          else
          {
              error = Ya_Listado;
          }
        }
    }
    else
    {
        a = new(TNodo);
        if(a==NULL)
        {
          error = Sin_Memoria;
        }
        else
        {
          a -> izq = NULL;
          a -> dch = NULL;
          a -> raiz = e;
        }
    }
  }



Responder | Citar | Moderar | Mensaje Privado
Training Channel
Sorancio


307 envíos
Desconectado

#1
RE: Insertar20-06-2010 a las 06:29:30

Está mal la lógica, básicamente, creas un nuevo nodo pero no asignas al padre que apunte a el, seguirá apuntando a NULL.

Yo en C lo haría así (falta definición de funciones), en C++ te funcionará.

Código Fuente:
int insertar(arbol *nodo, int valor)
{
  while (nodo != NULL) {
      if (nodo->valor > valor) {
        if (nodo->izquierda == NULL) {
            nodo->izquierda = nuevoNodo(valor);
        } else {
            nodo = nodo->izquierda;
        }
      } else if (nodo->valor < valor) {
        if (nodo->derecha == NULL) {
            nodo->derecha = nuevoNodo(valor);
        } else {
            nodo = nodo->derecha;
        }
      } else {
        return ERROR_NODO_YA_EXISTE;
      }
}


Responder | Citar | Moderar | Mensaje Privado