哈夫曼编码 急急 用二叉树表示

设有字符集合及其频率,
C={a:5, b:9, c:12, d:5, e:8, f:23, g:60
h:13, p:78}

1、如果使用定长编码法进行编码,请给出具体
编码方案,并计算总码长。

2、再给出最优编码方案,并计算总码长。

哈夫曼基本题吧。。
最小码长的话就每次选取最小两个相加,然后放回集合C,循环进行就完事了,
如第一部就是取出a,d组成ad:10,然后C中加入ad:10,去掉a:5,d:5,当然也可以用da:10来替换

楼主,可以参考下这篇博客:
https://blog.csdn.net/jeffleo/article/details/53557143

根据字母的个数首先Huffman建树(用数组模拟)
struct Node//树结点
{
int weight;
int lc;
int rc;
int parent;
};

void BuildHuffumanTree(Node * node, int n)//生成Huffman编码树
{
int child1,child2;
for (int i = n; i < 2*n - 1; i++)
{
searchLT(node, i, child1, child2);//找当前最小的两个值,此处自己实现一个搜索最小两个结点的函数
node[child1].parent = i;//给前最小的两个值增添父节点i
node[child2].parent = i;

    node[i].lc = child1;//父结点i的左孩子
    node[i].rc= child2;//父结点i的右孩子
    node[i].weight = node[child1].weight + node[child2].weight;//父结点到权值为两个孩子权值之和
}

}
建树之后,算编码长度,就从叶结点回溯到根节点计算层数,全部加起来就行

https://blog.csdn.net/zhagoodwell/article/details/53511898

虽然和你的题目要求不一样~不过这个应该对你有帮助,比如输出树形图片说明