Error en arbol

Iniciado por Lateseles, 2 Noviembre 2011, 14:56 PM

0 Miembros y 1 Visitante están viendo este tema.

Lateseles

Hay alguien que haya conseguido la version completa en español del libro: "El lenguaje de programacion c++" de bjarne strosutrup ?. Dicho esto, estaba intentando hacer un arbol binario. compila bien pero al ejecutarse en la consola aparece lo que deberia aparecer, se obtiene bien el resultado pero, al mismo tiempo sale el cartelito de error. Si alguien puede darme un consejo se lo agradeceria.
----------------------------------------------------------------------------------------------------
Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

struct Nodo
{
   int valor;
   char letra;
   Nodo *pMenor;
   Nodo *pMayor;
};

class Arbol
{
  private:
  Nodo *pOrigen;

  public:
   Arbol(int num, char c)
   { pOrigen->pMayor = NULL;
     pOrigen->pMenor = NULL;
     pOrigen->valor = num;
     pOrigen->letra = c;
   }
   void Add(int num, char c)
   {
       Nodo *pRecorre = pOrigen;
       while(true)
       {
           if(num > pRecorre->valor)
           {
               if(pRecorre->pMayor == NULL)
               {
                   Nodo *pNuevoNodo = new Nodo;
                   pNuevoNodo->valor = num;
                   pNuevoNodo->letra = c;
                   pNuevoNodo->pMayor = NULL;
                   pNuevoNodo->pMenor = NULL;
                   pRecorre->pMayor = pNuevoNodo;
                   break;
               }
               else
               {
                   pRecorre = pRecorre->pMayor;
               }
           }

           else if(num < pRecorre->valor)
           {
               if(pRecorre->pMenor == NULL)
               {
                   Nodo *pNuevoNodo = new Nodo;
                   pNuevoNodo->valor = num;
                   pNuevoNodo->letra = c;
                   pNuevoNodo->pMayor = NULL;
                   pNuevoNodo->pMenor = NULL;
                   pRecorre->pMenor = pNuevoNodo;
                   break;
               }
               else
               {
                   pRecorre = pRecorre->pMenor;
               }
           }
           else
           {
               pRecorre->letra = c;
               break;
           }
       }
   }

   char Find(const int num)
   {
       Nodo *pRecorre = pOrigen;
       while(true)
       {
           if(pRecorre->valor == num)
           {
               return pRecorre->letra;
           }
           else if(num > pRecorre->valor)
           {
               if(pRecorre->pMayor == NULL) { return '&'; }
               else
               {
                   pRecorre = pRecorre->pMayor;
               }
           }
           else if(num < pRecorre->valor)
           {
               if(pRecorre->pMenor == NULL) { return '&'; }
               else
               {
                   pRecorre = pRecorre->pMenor;
               }
           }
       }
   }
};

int main()
{
   Arbol miArbol(0, 'g');
   miArbol.Add(5, 'f');
   miArbol.Add(6, 'f');
   miArbol.Add(7, 'f');
   miArbol.Add(8, 'f');
   miArbol.Add(9, 'D');
   char c = 'A';
   c = miArbol.Find(9);
   cout << "La letra es:  " << c << endl;
   return 0;
}

Lateseles

Despues de darle muchas vueltas encontre el error. Estaba en el constructor del arbol.
Arbol(int num, char c)
    {
      pOrigen = new Nodo; //Con esta linea se soluciona
      pOrigen->pMayor = NULL;
      pOrigen->pMenor = NULL;
      pOrigen->valor = num;
      pOrigen->letra = c;
    }

do-while

¡Buenas!

Cierto, yo tampoco lo habia visto. :D, acuerdate de crear un destructor para liberar la memoria dinamicamente asignada.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!