问题描述
ZC一天在看计算机的书籍的时候,看到了一个有趣的东西!每一串字符都可以被编码成一些数字来储存信息,但是不同的编码方式所需的储存空间是不一样的!所以ZC就想:是否存在一种编码方式,使得字符编码所需的最小空间值!显然这是可能的,因为书上有这一块内容--哈夫曼编码(Huffman Coding);一个字母的权值等于该字母在字符串中出现的频率。所以ZC想让你帮忙,给你一个字符串,并让你判断这个字符串编码之后的空间值(即01串的长度)?
- 输入要求
第一行是一个数字n,表示有n组数据,然后每一组数据是一字符串(没有空格,只有包含小写字母组成,长度不超过100)。
- 输出要求
对于每组测试数据输出这个串编码之后的空间值。
程序如下
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
//哈夫曼树结点结构
typedef struct {
int weight;//结点权重
int parent, left, right;//父结点、左孩子、右孩子在数组中的位置下标
}HTNode, *Huffma