数据结构课程设计数据的压缩与解压(HuffmanTree)(java)

终于到第二题了,这个题主要需要理解霍夫曼编码以及二进制编码的一些东西

数据压缩与解压缩(霍夫曼树)简介

霍夫曼树一般指哈夫曼树。给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

题目要求

在这里插入图片描述
在这里插入图片描述
主要思想是通过HashMap存取每个字符的个数,通过频率不同生成Huffman树.
再生成对应的2进制编码.

代码有点长就只放主要代码了📃
注意
我生明了一个静态的hashmap和stringburder
代码直接复制粘贴可能会有问题.

获取01编码

 /**
     * 获取Huffman编码
     * @param node
     * @param code
     * @param stringBuilder
     */
    private static void getCode(HuffmanTreeNode node,String code,StringBuilder stringBuilder){
   
        StringBuilder stringBuilder1=new StringBuilder(stringBuilder);
        stringBuilder1.append(code);
        if (node.getData()==null){
   
            getCode(node.getLeftChild(),"0",stringBuilder1);
            getCode(node.getRightChild(),"1",stringBuilder1);
        }else{
   

            huffmanCode.put((Character) node.getData(),stringBuilder1.toString());
        }

    }
 	/**
     * 重写getCode方法
     */
    private static Map<Character,String>  getCode (HuffmanTreeNode node){
   
        if (node==null){
   
            return null;
        }
        getCode(node.getLeftChild(),"0",stringBuilder
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值