Definizione

Un albero consiste di un insieme di nodi e un insieme di archi orientati che connettono coppie di nodi, con le seguenti proprietà:

  • Un nodo dell’albero è designato come nodo radice;
  • Ogni nodo , a parte la radice, ha esattamente un arco entrante;
  • Esiste un cammino unico dalla radice ad ogni nodo;
  • L’albero è connesso.

Un albero è dato da un insieme vuoto oppure un nodo radice e zero o più sottoalberi, ognuno dei quali è un albero; la radice è connessa alla radice di ogni sottoalbero con un arco orientato.

tree

Terminologia

tree-defs

ElementoDefinizione
Radice
Padre di ,
, Radici dei sottoalberi
, Fratelli, figli di
Nodi violaFoglie
Altri nodiNodi interni

tree-defs

ElementoDefinizione
Profondità dei nodi (depth)Lunghezza del cammino semplice dalla radice al nodo, misurato in numero di archi.
Livello (level)Insieme di nodi alla stessa profondità.
Altezza dell’albero (height)Profondità massima delle foglie.

Memorizzazione

Esistono diversi modi per memorizzare un albero a seconda del numero massimo e medio di figli presenti:

  • Realizzazione primo figlio, prossimo fratello se ogni nodo può avere un numero arbitrario di figli;
  • Realizzazione con vettore dei figli se si sa mediamente quanti figli ci sono per ogni nodo, che avrà un riferimento al nodo padre;
  • Realizzazione con vettore dei padri se interessa mantenere solo la relazione figlio → padre.

Tipi di alberi

Albero binario

Un albero binario è un albero radicato in cui ogni nodo ha al massimo due figli, identificati come figlio sinistro e figlio destro. Ogni nodo ha un riferimento al nodo padre e ai due figli.

Albero generico

Un albero generico è un albero radicato in cui ogni nodo ha un numero arbitrario di figli, o nessuno.

Visita di un albero

Una visita è una strategia per analizzare (visitare) tutti i nodi di un albero, ossia scansionarne tutti i valori.

Per visitare un albero, si visita ricorsivamente ognuno dei suoi sottoalberi; richiede uno stack di appoggio ed ha tre varianti: pre/in/post visita (pre/in/post order).

dfs

dfs-in

dfs-post

Ogni livello dell’albero viene visitato uno dopo l’altro; richiede una coda.

bfs

Costo computazionale delle visite

Dato che ogni nodo viene visitato al massimo una volta (se l’algoritmo è implementato correttamente), il costo di una visita di un albero contenente nodi è .