我想每个计算机专业的学生或多或少都接触过哈夫曼编码,数据结构中的老问题了。大体就是给出一些字符,和这些字符的出现频率,让你为这些字符设 计 一个二进制编码,要求频率最高的字符的编码最短。
我想每个计算机专业的学生或多或少都接触过哈夫曼编码,数据结构中的老问题了。大体就是给出一些字符,和这些字符的出现频率,让你为这些字符设 计 一个二进制编码,要求频率最高的字符的编码最短。解决的方法是构造一棵哈夫曼树(二叉树),其基本思路是,每次从这些字符中挑出两个频率最低 的, 然后构造一个新的结点,使新结点的左右孩子指针分别指向那两个节点。我想这个大家都很清楚了,我就不多说了。主要讲下这次我用C++实现时遇到 的问 题。首先,我定义了一个哈夫曼树结点: class hNode
{
public:
friend bool operator > (hNode n1,hNode n2); file://定义了大于符号,供优先队列排列使用
hNode(string d="",int i=0,hNode* l = NULL,hNode* r =NULL):left(l),right(r),data(d),value(i){}
hNode* left;
hNode* right;
string data; file://储存的字符串
int value; file://字符串出现的次数
};
bool operator >(hNode n1,hNode n2)
{
return n1.value > n2.value;
}