有当一个结点是另一个结点的双亲时?该结点的字符编码才会是另一个结点的字符编码的前缀。为了使不等长编码为前缀编码?可用该字符集中的每个字符作为叶子结点生成一棵编码二叉树?为了获得文件的最短长度?特将每个字符的出现频率作为字符结点的权值赋予该结点上?求出此树的最小带权路径长度就等于文件的最短长度。因此?对文件进行压缩?就可以转化字符集中的所有字符作为叶子结点?字符出现的频率作为权值所产生的 h u f f m a n 树的问题。基本思路大致有了后?接下来是对程序的编写工作?程序初步形成后?对其测试?发现了一些语法错误, 修正后编译通过。五、使用说明用户进行本程序前?首先要在起工程文件下建立一个待压缩的文本文档?例如? h u f f m a n . t x t ?文档内已有内容?且文档大小大于 5 K 。运行程序如下图所示图 5 程序主菜单压缩?在命令行下输入 1 对文件进行压缩?根据提示输入刚刚建的文本文件? h u f f m a n . t x t ??和要生成的压缩文件名称?按回车确认进行压缩。图 6 压缩文本成功执行完毕后如下图所示。图 7 压缩完毕恢复?在命令行下输入 2 对本程序压缩的文件进行恢复?根据提示输入待恢复的文件名称和恢复后的文件名称?按回车确定?成功执行后如下图所示。图 7 文件恢复完毕对比?在命令行下输入 3 对恢复后的文件和原文件对比?根据提示输入要对比的文件?按回车确认?成功执行后如下图所示。图 8 文件恢复完毕六、测试结果程序功能满足设计要求?测试未发现明显 b u g ?详细可参见五使用说明。七、参考书目【 1 】吴国凤. C / C + + 程序设计?第 2 版?【 M 】. 高等教育出版社? 2 0 0 9 年 9 月【 2 】郑莉等. c + + 语言程序设计?第三版?【 M 】. 北京?清华大学出版社? 2 0 0 3 年 1 2 月