数据结构学习(十二)——哈夫曼树

从书上摘抄过来。

哈夫曼树是二叉树的一个应用实例,它是一种变长码。它的出现是为了提高数据存储和数据通信的效率,通常对数据进行压缩编码,对降低系统成本和功耗方面有意义。

对哈夫曼树的使用需要注意些地方。

  • 在变长码中,概率高的成员使用短的代码,这是提高效率的保证。
  • 为了译码不出现混乱,每个短代码都不能成为其他长代码的开头。这一点在译码树上表现为:译码结果必须为树叶,每片树叶不能成为其他树叶的中间结点。下面的代码是哈夫曼译码的一个算法程序。

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;
		}
	}
}


你可能感兴趣的:(数据结构,编程,算法)