Stampa in rappresentazione parentetica

L'esercizio consiste nella stampa di tutti i nodi di un albero generale, rappresentato usando vettori dinamici, in rappresentazione parentetica. La rappresentazione parentetica è simile a quella degli alberi binari: l'albero vuoto si stampa come (). Per ogni altro albero, si stampa (, poi la radice, poi i sottoalberi, e infine ).

Si tratta in sostanza di fare la stampa ricorsivamente:

  1. Se l'albero è vuoto, stampa ()
  2. Altrimenti, stampa (, poi la radice, i sottoalberi e infine ).

Come si vede chiaramente, si tratta della stampa dei nodi dell'albero, in cui però a ogni passo stampo prima ( e poi ).

Nel caso di alberi generali, per stampare i sottoalberi si usa un ciclo: il numero di figli (e quindi di sottoalberi) si trova in a->numfigli, mentre i puntatori ai nodi figli (ossia i sottoalberi) si trovano nel vettore a->figli.

void StampaAlbero(TipoAlbero a) {
  int i;

  if(a==NULL) {
    printf("()");
    return;
  }

  printf("( %d ",a->info);
  for(i=0; i<a->numfigli; i++)
    StampaAlbero(a->figli[i]);
  printf(" ) ");
}