Newsgroup: it.comp.lang.c++
Titolo: HELP visualizzazione alberi!

Eseguendo un esericizio PER L'UNIVERSITA' :) mi sono trovato
davanti al problema di trovare un modo sistematico ed efficace per
 visualizzare alberi su schermo.
Sia che gli alberi siano n-ari che binari, mi trovo davanti a grosse
difficoltà.
Per inciso, l'esercizio originario era soltanto scrivere un prog che
convertisse alberi n-ari
in binari, e quello l'ho già fatto :)
Ma dato che non c'è niente di più indispensabile del superfluo, volevo
trovare un modo
"carino" per stampare su schermo l'albero ottenuto (che in ogni caso in
memoria c'è e
c'è correttamente).
Come posso fare? C'è bisogno di usare librerie non-standard (tipo grafiche)?
Non si può fare? A me basterebbe per l'albero binario, per l'n-ario sarebbe
il top.
Se vi può servire l'albero n-ario è implementato come un int+una lista di
figli (lista nel vero
senso della parola, coi puntatori next) sui quali si possono fare solo
operazioni di
head,tail e cons.
L'albero binario è un int+ due puntatori a alberi  binari.
Se vi servono frammenti di codice dite che posto (ma non penso vi servano
:).
Grazie!
--
Emanuele Di Saverio
---------------------------------------------
Remove NOSPAM manually for reply
Scusate le vaccate se  ne dico!

 il top.
Beh.. se vuoi fare una cosa "carina", cioè visualizzarlo in modo grafico,
devi usare librerie non standard.
Altrimenti, ti dovrai limitare a visualizzare l'albero sotto forma di testo
nell' output standard, per esempio usando la rappresentazione parentetica:
in modo ricorsivo e partendo dalla radice, ogni sottoalbero si rappresenta
con la parentesi aperta seguita dal valore memorizzato nel suo nodo radice,
seguito dallo spazio, seguito dalla rappresentazione parentetica del
sottoalbero sinistro, seguita da spazio, seguita dalla rappresentazione
parentetica del sottoalbero destro, seguita dalla parentesi chiusa.
Formalmente:
- Visualizza sottoalbero :
    - Scrivi "("
    - Inserisci il valore memorizzato nella radice del sottoalbero seguita
dallo spazio
    - Visualizza sottoalbero sinistro seguito dallo spazio
    - Visualizza sottoalbero destro
    - Scrivi ")"
--
Se gli imbecilli volassero, oscurerebbero il cielo.

 parentetica del sottoalbero destro, seguita dalla parentesi chiusa.
Una soluzione analoga, ma piu' "user-friendly", e' la visualizzazione di
ciascun nodo indentato in proporzione al suo livello. Ad esempio:
a
  b
    c
  d
    e
 
Ciao,
Nicola
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Formalmente:
[CUT pseudocode]
La parentetica (std::pettorossi) l'ho già fatta, però è praticamente
impossibile
capire chi è la capoccia dell'albero senza mettersi a contare le parentesi
ad una ad una!
Graziecmq!
Emanuele Di Saverio


FICO! Potresti spiegarmi meglio perň?
nell'albero d'esempio da te buttato giů,
chi sono i figli di a? E' a la capoccia dell'albero?
e se avesse anche figlio sx?
Il tutto č fattibile con setw()?
Al 2+ livello, l'indentazione non č fissa perň!
Insomma č fico ma non ho capito perchč!


 Emanuele Di Saverio


 Insomma è fico ma non ho capito perchè!
a dovrebbe essere la radice, con b e d come figli diretti. c a sua volta è
figlio di b, mentre e è figlio di. Si può fare molto semplicemente con la
ricorsione.
-- 
Andrea Bergia - studente          Linux Registred User #281550
Per favore non mandatemi allegati in Word o PowerPoint.
Si veda 
http://www.fsf.org/philosophy/no-word-attachments.html

 Come posso fare? C'è bisogno di usare librerie non-standard (tipo grafiche)?
Ti segnalo una suite open source di tool grafici per unix e windows
Graph Visualization Project (GraphViz), che ti permette di fare quello
che ti serve e anche di più (c'è pure un servizio per il web), il sito
ufficiale è:
http://www.research.att.com/sw/tools/graphviz/
vedi anche per gli sviluppatori:
http://www.graphviz.org/
Fatti un giro su "sample displays" del primo sito di cui sopra dove
troverai  delle schermate di quello che potresti fare.
E se non hai ancora finito, buon lavoro!!
Francesco