Array
La struttura dati può essere implementata con un array P
contenente tutti i nodi.
In entrambe le rappresentazioni, avendo nodi, la complessità spaziale è data da .
Un albero di esempio può essere:
Padri
In questa rappresentazione l'array è composto da coppie (info, parent)
.
Nell'esempio, l'array P
sarà rappresentato come P = [(A, -1), (B, 0), (C, 0), (D, 1), (E, 1)]
.
Implementazione
-
Padre
padre(Tree P, Node v) -> Node | NIL if P[v].parent == -1 return NIL else return P[v].parent
per cui .
-
Figli
figli(Tree P, Node v) -> [Node] l = [] for i = 0 to P.length-1 if P[i].parent == v push(l, i) // Assunto 𝛩(1) return l
per cui .
Posizionale
In questo caso la rappresentazione è applicabile per alberi -ari completi con salvato in P.k
.
Solamente info
è salvato nell'array, perchè la relazione tra i nodi è conservata come indice nell'array.
Nell'esempio, l'array P
sarà rappresentato come P = [A, B, C, D, E]
, ovvero:
La radice è in posizione , mentre i figli del nodo sono in posizione per . Definiamo padre di quando si ricava che: dato che .
Implementazione
-
Padre
padre(Tree P, Node v) -> Node | NIL if v == 0 return NIL else return floor((v - 1)/P.k)
per cui .
-
Figli
figli(Tree P, Node v) -> [Node] l = [] if P.k*v + 1 >= P.length return l else for i = 0 to P.k-1 push(l, P.k*v + 1 + i) // Assunto 𝛩(1) return l
per cui perchè nel caso migliore è .