Te mostraré el árbol como una clase C++. No voy a preocuparme de ocultar datos internos ni nada de eso, solo pretendo dar un ejemplo de implementación:
class nodo{
TIPO data;
nodo* hi;
nodo* hd;
inline bool final() { //nodo final
return ((hi==null)&&(hd==null)); // no tiene hijos
}
int altura() {
if (this.final)
return 0;
else
return max(hi->altura(),hd->altura())+1;
}
}
class arbol{
public:
nodo* raíz;
}
cualquier función recursiva que necesites para los nodos (altura, tamaño, etc) recurre al ejecutar para hi y hd (los hijos), i llega al caso sencillo al toparse con un nodo final. Espero que con el ejemplo de la altura lo veas claro. Si quieres algo más elaborado, iría bien que concretases qué tipo de datos va a manejar el arbol y que planeas hacer con ellos.
Si necesitas algo más, estaré encantado de aydarte.