Veo que el problema era como dijo CalgaryCorpus. En esa funcion cuando haces a = nuevo; y despues haces un return. Al salir de la funcion, no se afecto realmente a lo que vos necesitabas. Ya que vos modificaste una variable local, que es un puntero. Vos podes modificar el nodo pero no a lo que apunta. Pasa lo mismo con un entero normal. Si pasas un entero por valor, al modificarlo y retornar el entero vuelve a su valor inicial. Aca pasa lo mismo, pasas un puntero, modificas su valor y cuando volves vuelve a su valor. Posible modificacion:
Código C:
Ver originalvoid arbol::insertar(nodo **a, string b)
{
if(*a == NULL)
{
nodo *nuevo;
nuevo = new nodo(b,0,NULL,NULL);
*a = nuevo;
numElements++;
return;
}
else
{
if(b < (*a)->clave)
{
insertar( & ((*a)->izq),b);
// AQUI SE RECALCULARÍAN LAS ALTURAS
}
else if(b > (*a)->clave)
{
insertar( & ((*a)->der),b);
// AQUI SE RECALCULARÍAN LAS ALTURAS
return;
}
}