2.6 KiB
Albero radicato
Un albero radicato è una struttura dati di natura ricorsiva che organizza i dati in maniera non-lineare.
Proprietà
- Ogni nodo dell'albero ha un unico genitore:
∀ (padre, figlio), (padre' figlio) ∈ E \implies padre = padre'
- Ogni nodo dell'albero può avere un numero qualsiasi di figli.
- I nodi superiori al padre vengono chiamati antenati.
- I nodi inferiori ai figli vengono chiamati discendenti.
- Nodi senza padre sono detti radice:
\notexists (padre, radice) ∈ E
- Nodi con padre e figli sono detti rami o interni.
- Nodi senza figli sono detti foglie.
- La distanza tra il nodo radice e i suoi discendenti è detta livello:
- I figli immediati sono di livello 1.
- I "nipoti" (figli dei figli) sono di livello 2.
- I figli dei nipoti sono livello 3.
- E così via.
- Il livello massimo all'interno di un albero è detto altezza, profondità oppure h, ed è sempre
1 ≤ h ≤ n-1
.
- Un albero ha sempre
n-1
archi.
Alberi particolari
Alberi d
-ari
Un albero d
-ario è un particolare tipo di albero che limita il numero massimo di figli di un nodo a d
.
Un albero binario può avere massimo 2 figli per ogni nodo; un albero ternario ne può avere 3; un albero
17
-ario ne potrà avere 17
Alberi completi
Un albero d
-ario si dice completo se tutti i nodi hanno 0 o d
figli, e mai una numero in mezzo.
Alberi bilanciati
Un albero d
-ario si dice bilanciato se tutti i livelli eccetto l'ultimo hanno il numero massimo di figli.
Alberi perfettamente bilanciati
Un albero d
-ario si dice perfettamente bilanciato se tutti i livelli incluso l'ultimo hanno il numero massimo di figli.
Particolarità degli alberi binari perfettamente bilanciati
Si può dimostrare per induzione che:
- Hanno sempre
2^h
foglie. - Hanno sempre
2^{h+1}-1
(\sum_i=0^n 2^i
) nodi. - L'altezza è in
Θ(log n)
.
Implementazione degli alberi
Possiamo scegliere se usare una rappresentazione con array o con nodi e puntatori: ognuna ha vantaggi e svantaggi diversi.
Implementazione tramite array
E' suggerito se l'albero è regolare; più è simile a un albero d-ario completo, meglio è.
Implementazione tramite nodi e puntatori
Più adatta ad alberi irregolari.
Se l'albero è regolare, creiamo il numero esatto di campi:
- Valore
- Figlio1
- Figlio2
- Opzionale: Padre
Se un albero è irregolare, creiamo una specie di lista:
- Valore
- Primo figlio
- Prossimo fratello
- Opzionale: Padre