數據結構學習(十二)——哈夫曼樹

從書上摘抄過來。算法

哈夫曼樹是二叉樹的一個應用實例,它是一種變長碼。它的出現是爲了提升數據存儲和數據通訊的效率,一般對數據進行壓縮編碼,對下降系統成本和功耗方面有意義。編碼

對哈夫曼樹的使用須要注意些地方。code

  • 在變長碼中,機率高的成員使用短的代碼,這是提升效率的保證。
  • 爲了譯碼不出現混亂,每一個短代碼都不能成爲其餘長代碼的開頭。這一點在譯碼樹上表現爲:譯碼結果必須爲樹葉,每片樹葉不能成爲其餘樹葉的中間結點。下面的代碼是哈夫曼譯碼的一個算法程序。

typedef struct Node2
{
	char ch;
	struct Node2 *lchild;
	struct Node2 *rchild;
}BTNode2;

BTNode2 *Huffman;
int ERROR;

void Decode()
{
	BTNode2 *p;
	int a;

	p = Huffman;
	ERROE = 0;
	while(1)
	{
		a = Getbit();
		if(a == -1)
			return;
		if(a == 1)
			p->rchild;
		else
			p = p->lchild;
		if(p == NULL)
		{
			ERROR = 1;
			return;
		}
		if(p->lchild == NULL && p->rchild == NULL)
		{
			Outch(p->ch);
			p = Huffman;
		}
	}
}
相關文章
相關標籤/搜索