puntaID dovrebbe essere un vettore di puntatori non di interi...a meno che tu non abbia una struttura condivisa con le strutture...ma di solito sono cose da evitare
poi la storia del padre è un po' ingarbugliata così, dovresti mettere una variabile nella struttura che indica se quell'istanza è già stata visitata
per il resto la ricorsione viene naturale...
funz(struct Prova* n) {
if n->id != 1 //così mi sembra di aver capito
per ogni figlio
funz(n->puntaID[i])
return;
};
un'alternativa per la storia del padre è passare come argomento l'id del padre...tipo:
funz(struct Prova* n, int padre) {
if n->id != 1//così mi sembra di aver capito
per ogni figlio
if n->puntaID[i] != padre
funz(n->puntaID[i],n->id)
return;
};
naturalmente sono solo bozze...cerca di essere più completo nella descrizione del problema