Buenas, vi que subieron sus soluciones, pero aun asi queria consultar si la que habia pensado está bien, y si utilice bien el tema del pasaje por referencia:
uint altura(AB a) {
if (a == NULL)
return 0;
else return (1 + max(altura(a->izq), altura(a->der)));
}
Lista insertarAlPrincipio(Lista l, uint elem) {
if (l == NULL) {
l = new nodoLista;
l->elem = elem;
l->sig = NULL
}
else {
Lista pos = new nodoLista;
pos->elem = elem;
pos->sig = l->sig;
l = pos;
};
return l;
}
void caminoMasLargoRec(AB a, Lista &l) {
if (a != NULL) {
l = insertarAlPrincipio(l, a->elem);
if ((a->izq != NULL) && (a->der != NULL) && (altura(a->izq) >= altura(a->der)))
caminoMasLargoRec(a->izq, l);
else if ((a->izq != NULL) && (a->der != NULL) && (altura(a->izq) < altura(a->der)))
caminoMasLargoRec(a->der);
else if (a->izq != NULL)
caminoMasLargoRec(a->izq);
else if (a->der != NULL)
caminoMasLargoRec(a->der);
};
}
Lista caminoMasLargo(AB a) {
if (a == NULL)
return NULL;
else {
Lista l;
caminoMasLargoRec(a, l);
l = insertarAlPrincipio(l, a->elem); //inserto el elemnto de la raiz de a que me quedó pendiente
return l;
}
}