function T = huffman_tree(p)
	
	% cardinalità dell'alfabeto
	N = numel(p);
	
	% alloca la struttura dati per l'albero
	% - le foglie hanno indice tra 1 ed N
	% - la radice dell'albero avrà indice 2*N-1
	T(2*N-1).root = [];
	T(2*N-1).leaf = [];
	T(2*N-1).bit = [];
	
	% ciclo sui nodi da aggiungere
	for i = N+1:2*N-1
	
		% scegli gli elementi con probabilità minima
		% e marcali con un valore di probabilità
		% "impossibile"
		[val1,pos1] = min(p);
		p(pos1) = 2;
		[val2,pos2] = min(p);
		p(pos2) = 2;
		
		% aggiungi la probabilità del nodo padre
		% al vettore delle probabilità
		p(i) = val1+val2;
		
		% aggiorna la struttura con gli indici del
		% nodo padre per i nodi pos1 e
		% pos2 e dei nodi figli per il nodo padre
		T(pos1).root = i;
		T(pos1).bit = 0;
		T(pos2).root = i;
		T(pos2).bit = 1;
		T(i).leaf = [pos1,pos2];
		
	end
	
end
