function [a,r] = huffman_decode(T,msg,a_maxlen)
	if nargin < 3
		a_maxlen = inf;
	end
	
	% cardinalità dell'alfabeto
	N = (numel(T)+1)/2;
	
	% inizializza il messaggio decodificato
	a = [];
	
	% posizione iniziale nel messaggio
	% e posizione dell'ultimo bit utilizzato
	pos = 1;
	last_pos = 0;
	
	% continua la decodifica finché ci sono bit
	% da elaborare ovvero fino ad un prefissato
	% numero di simboli decodificati
	while numel(a) < a_maxlen && pos <= numel(msg)

		% parti dalla radice
		i = 2*N-1;

		% trova la foglia indicata dal codice
		while numel(T(i).leaf) && pos <= numel(msg) 
			i = T(i).leaf(1+msg(pos));
			pos = pos + 1;
		end

		% questo serve a verificare che la decodifica
		% sia stata completata
		if numel(T(i).leaf) == 0
			a = [a,i];
			last_pos = pos-1;
		end
	end
	
	% i bit fino a last_pos sono stati utilizzati...
	r = msg(last_pos+1:end);
end
