Una cosa, no se si soy yo que me estoy liando: todos los nodos pueden actuar como hijos y como padres ok? En base a esto deberias usar dos punteros internos: uno para la lista de hijos y el otro para la lista principal de padres:
Código C:
Ver originalstruct nodo {
tipo dato;
struct nodo *hijos;
struct nodo *siguiente;
};
Lo que estas haciendo tiene la misma distribucion que los arboles parseados de un xml por libxml2 (puedes echar un vistazo a la libreria de xmlsoft, de hecho la estructura de nodos es la misma solo que cambian 'nodo' por '_xmlNode', 'siguiente' por 'next' y 'hijos' por 'children')
Saludos
vosk