Java理解实现哈夫曼树以其编码解码

本文介绍了如何使用Java构建哈夫曼树,并基于字符频度进行编码。通过读取字符集和权值,建立哈夫曼树,生成编码并存储。此外,还详细说明了如何利用已有的哈夫曼编码文件对输入文本进行解码,输出解码后的字符正文及其对应的二进制码。测试数据中展示了对特定报文的译码过程。
摘要由CSDN通过智能技术生成

哈夫曼树以其编码解码

要求:
1.从终端读入字符集大小为n(即字符的个数),逐一输入n个字符和相应的n个权值(即字符出现的频度),建立哈夫曼树,进行编码并且输出。
将它存于文件hfmtree中(选做)。
2.利用已建好的哈夫曼编码文件hfmtree,对键盘输入的正文进行译码。输出字符正文,再输出该文的二进制码。
[测试数据]
用下表中给出的字符集(n=27)和频度的实际统计数据建立哈夫曼树:
在这里插入图片描述
 并实现以下报文的译码和输出:“THIS PROGRAM IS MY FAVORITE”。

结点代码:

public class HNode {
   

    public String code = "";// 节点的哈夫曼编码
    public String data = "";// 节点的数据
    public int count;// 节点的权值
    public HNode lChild;
    public HNode rChild;

    public HNode() {
   
    }

    public HNode(String data, int count) {
   
        this.data = data;
        this.count = count;
    }

    public HNode(int count, HNode lChild, HNode rChild) {
   
        this.count = count;
        this.lChild = lChild;
        this.rChild = rChild;
    }

    public HNode(String data, int count, HNode lChild, HNode rChild) {
   
        this.data = data;
        this.count = count;
        this.lChild = lChild;
        this.rChild = rChild;
    }
}

哈夫曼树及编码解码

public class Huffman {
   
    private String str;// 字符串    
    private HNode root;// 哈夫曼二叉树的根节点
    private boolean flag;// 最新的字符是否已经存在的标签
    private LinkedList<CharData> charList;// 存储不同字符的队列 相同字符存在同一位置
    private LinkedList<HNode> NodeList;// 存储节点的队列

     private class CharData {
   
         int num = 1; // 字符个数
         char c; // 字符

         public CharData(char ch){
   
             c = ch;
         }
     }

    /**
     * 构建哈夫曼树
     */
    public void creatHfmTree(String str) {
   
        this.str = str;

        NodeList = new LinkedList<HNode>();
        charList = new LinkedList<CharData>();

        // 1.统计字符串中字符以及字符的出现次数
        // 以
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值