终于到第二题了,这个题主要需要理解霍夫曼编码以及二进制编码的一些东西
数据压缩与解压缩(霍夫曼树)简介
霍夫曼树一般指哈夫曼树。给定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