Visita di un albero.
PREORDINE (Preorder) o ordine anticipato: R – S – D
7 2 1 3 4 9.
POSTORDINE (Postorder) o ordine posticipato o polacco: S – D – R
2 1 7 4 9 3 5.
INORDINE (Inorder) o ordine simmetrico: S – R – D
2 7 1 5 4 3 9.
Definizione di un albero.
Un albero può essere implementato definendo una struttura di base nel seguente modo.
struct nodo {
// Albero di numeri interi
int DATO;
// Puntatore al sottoalbero destro
struct nodo *DX;
// Puntatore al sottoalbero sinistro
struct nodo *SX;
} NODO;
typedef struct nodo* tree
Funzioni su un albero.
Le principali funzione che si possono implementare per utilizzare un albero sono:
bool Is_Empty(tree ROOT)
tree Albero_Vuoto(void)
int Valore_Etichetta(tree ROOT)
tree Destro(tree ROOT)
tree Sinistro(tree ROOT)
tree Costruisci_Albero(int ETICHETTA,tree S,tree D)
Esempio
Il seguente programma sviluppa il codice necessario ad implementare un albero binario e le principali funzioni per operare con esso. Si riporta una implementazione in C++ mediante l’utilizzo delle classi.
La foglia di un albero viene definita mediante la struttura:
typedef struct nodo{
int valore;
nodo *sinistra;
nodo *destra;
};
Esempio
Il programma principale è sviluppato in modo da testare tutti i metodi della classe BST vista in precedenza.
Esempio
La classe BST è composta di diversi memebri che di seguito verranno analizzati.
oid bst :: clean(nodo* &carr)
è il metodo deputato alla deallocazione dell’alabero.bst :: bst()
è il metodo per l’inizializzazione del bst.bst :: ~bst()
, metodo per la distruzione dell’albero.Esempio
La classe BST è composta di diversi memebri che di seguito verranno analizzati.
void bst :: add(nodo* &carr, int valore)
, metodo per l’aggiunta di un elemento nel bstnodo* bst :: binarySearch(nodo *carr, int valore)
, metodo per la ricerca di un elemento nel bstEsempio
La classe BST è composta di diversi memebri che di seguito verranno analizzati.
void bst :: visualize_symmetricOrder(nodo* carr)
, metodo per la stampa in symmetric order del bstvoid bst :: visualize_preOrder(nodo *carr)
, metodo per la stampa in pre order del bstEsempio
La classe BST è composta di diversi memebri che di seguito verranno analizzati.
void bst :: visualize_postOrder(nodo *carr)
, Metodo per la stampa in post order del bstunsigned int bst :: level(nodo* carr)
, metodo che restituisce il livello di profondità del bstEsempio
La classe BST è composta di diversi memebri che di seguito verranno analizzati.
void bst :: bst2array(nodo* carr, int *arr, int &pos)
, metodo privato per salvare il bst in un arrayvoid bst :: binaryInsertion(int *arr,int l, int r)
, metodo per l’inserimento di valori di un array in una lista.void bst :: optimize()
, metodo per l’ottimizzazione del bst (diminuisce il livello)1. Prolusione
2. Sistemi Operativi – parte prima
3. Sistemi Operativi – parte seconda
6. Il linguaggio C – parte prima
8. Il linguaggio C – funzioni e puntatori
10. Il linguaggio C – parte terza
11. La documentazione del software
12. Dati strutturati
13. Esercizi sui dati strutturati
14. Approfondimenti di C, Stringhe e file
15. Esercizi su stringhe e file
16. La ricorsione
17. Il linguaggio c++ parte prima
18. Il linguaggio C++ - parte seconda
19. Strutture dati di tipo astratto
Donald Knuth. The Art of Computer Programming, Volume 1: Fundamental Algorithms, Third Edition.Addison-Wesley, 1997. ISBN 0-201-89683-4. Section 2.3.