PDA

View Full Version : [c++]generare albero binario conoscendo numero di foglie o altezza stabilita


pmhwp
05-03-2008, 01:32
Ciao,
vorrei realizzare una funzione che mi generi un albero binario.

Vorrei realizzarlo in modo che la generazione avvenga o conoscendo il numero di foglie oppure l'altezza dell'albero.Quale è piu abbordabile? La seconda vero?

Ad esempio dato il numero x la funzione mi deve creare un albero binario di altezza x.
I nodi possono contenere come informazione anche solo numeri.

Chi mi puo aiutare?
Grazie.

yorkeiser
05-03-2008, 10:28
In generale, il numero di foglie e l'altezza di un albero binario non sono direttamente correlati (se non per la limitazione sul numero massimo di foglie presenti in funzione dell'altezza), ergo devi decidere tu quale criterio scegliere per la generazione dell'albero, in base alle tue esigenze.
Per l'implementazione di un albero utilizzando gli array, puoi vedere
qui (http://it.wikipedia.org/wiki/Albero_binario), anche se ti consiglio una struttura a puntatori, decisamente più elegante dal mio punto di vista

tæo
05-03-2008, 11:09
come dice yorkeiser dall'altezza o dal numero di foglie non è possibile derivare la struttura di un albero binario a meno che non si suppone che l'albero sia completo

con questa ipotesi i due dati sono assolutamente equivalenti:

-data un altezza n l'albero ha 2^n foglie
-date n foglie l'albero ha logn livelli

se poi il problema è invece quale struttura dati conviene usare la risposta è un definitivo dipende. una delle soluzioni più semplici (con quindi tutti gli svantaggi/vantaggi derivanti dalla semplicità stessa) è usare uno (o più) array

http://img23.imagevenue.com/loc1005/th_11685_esempio_122_1005lo.jpg (http://img23.imagevenue.com/img.php?image=11685_esempio_122_1005lo.jpg)

in alternativa per ridurre l'overhead e rendere più efficienti le operazioni di ricerca, aggiornamento/cancellazione/inserimento di valori puoi creare un sistema di oggetti.

pmhwp
05-03-2008, 18:56
Spiego meglio,
avete presente i tabelloni di una gara fatti ad albero?
La mia idea era quella di creare un albero binario con alle foglie le prime gare.Il vincitore passa quindi al nodo padre e via via fino ad arrivare alla radice...

Quindi facendo le accoppiate in base ai partecipanti creavo un albero binario di altezza x e dopodiche nelle foglie inserivo i partecipanti...

E' realizzabile una cosa del genere?Ha un senso utilizzare un albero binario?

Grazie ancora.