构造哈夫曼树对给定的字符串进行编码

给定一个字符串,用最少的01比特对该字符串进行编码,即哈夫曼编码。本题需要使用哈夫曼树的构造思想,因哈夫曼树的的构造不唯一,现约定如下,输入中首先给出了有多少个字符要编码,然后根据输入字符串获得每个字母按字典顺序的权值序列(每个字母的权值即该字母在字符串中出现的次数),构造哈夫曼树时每次从权值序列选取(从左到右选取)两个最小的权值,若选取的值不相等,那么较小值的结点作为以他们值加和的新结点的左孩子,另一个则为右孩子,若选取的值相等,先选取的做左孩子,后选取的做右孩子,删除已选取的值的结点,并在权值序列最后(注意最后!)添加两个选取值加和的新结点。如此往复,直到权值序列表长度为1。编码时,结点若有左孩子,结点到左孩子的路径标0,若有右孩子,结点到右孩子的路径标1,每个叶子结点内权值对应字母的编码即为根节点到该叶子结点路径上0或1的累积。