其它pta数据结构编程题请参见:
题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种。
解题思路:
1、构造哈夫曼树,并求出总代价COST,即各个字母的频数乘以编码长度的和。
2、对于题目给出的每一组编码,判断是否符合哈夫曼编码,即这组编码是否为前缀码,同时代价cost是否等于计算出的哈夫曼树的代价COST。
判断一组编码是否为前缀码的方法:
将这些编码逐个的添加到哈夫曼树中,对于每一个编码字符串,字符串中的每一个字符也逐个扫描,如果是0则向左构造树,1则向右构造树。如果已扫描到某节点为叶子节点但字符串还未结束,或者字符串已扫描结束但还当前节点非空,那么就不是前缀码。
需要注意的点:
最小堆数组中的元素类型ElementType为HuffmanTree型。
1 #include 2 #include 3 #include