Stampa di tutti i nodi

L'esercizio consiste nella stampa di tutti i nodi di un albero generale, rappresentato usando liste per i figli.

L'algoritmo ad alto livello se è lo stesso degli alberi binari e degli alberi generali rappresentati con vettori.

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

Nel caso di alberi generali, la frase ``stampa i sottoalberi'' si può tradurre in un ciclo del tipo: per ogni sottoalbero, stampalo. Abbiamo quindi il seguente algoritmo raffinato, che è diverso da quello degli alberi binari, ma è lo stesso degli alberi generali rappresentati con vettori dinamici.

  1. Se l'albero è vuoto, esci.
  2. Altrimenti,
    1. stampa la radice;
    2. per ogni sottoalbero, stampalo.

I sottoalberi sono gli alberi che hanno come radice uno dei figli. Dal punto di vista della implementazione nel linguaggio, un albero è l'indirizzo della struttura che rappresenta la radice dell'albero. Nel nostro caso, questi indirizzi sono memorizzati nella lista dei figli. Si tratta quindi di fare una scansione della lista dei figli della radice, effettuando la chiamata ricorsiva per ognuno di essi.

void Stampa(TipoAlbero a) {
  TipoLista l;

  if(a==NULL)
    return;

  printf("%d ",a->info);

  l=a->figli;

  while(l!=NULL) {
    Stampa(l->figlio);
    l=l->next;
  }
}