基于哈夫曼二叉树的文件压缩实现
上一篇博客中我们提到如何将一个字符串建立哈夫曼二叉树
那么我们实现文件压缩其实已经成功了一半
哈夫曼二叉树可以得到哈夫曼编码,哈夫曼编码具有不重复的特性,我们可以利用这一特性来实现压缩
获取哈夫曼编码的规则是:从根节点出发往左就+“0”,往右就+“1”直到找到叶子节点
获取哈夫曼编码的方法:
/*
* 此方法用来得到哈夫曼编码
*/
public void getBM(Node roo,String st){
if((roo.getLeft()==null)&&(roo.getRight()==null)){
str+=st;
String q=str;
roo.getStr();
System.out.println(str);
}
if(roo.getLeft()!=null){
getBM(roo.getLeft(), st+"0");
}
if(roo.getRight()!=null){
getBM(roo.getRight(), st+"1");
}
}
/*
* 此方法封装了getBM(Node roo,String st)用来得到哈夫曼编码
*/
public void getBM(){
getBM(root, str);
}
因为叶子节点都是存储的我们字符串中存在的字符,所以每个字符都能对应一个哈夫曼编码,我们只需要将字符串中的字符替换位哈夫曼编码,就能生成一组01串,然后将01串每隔8位存储为一个byte,就能大大的压缩存储空间
我们这时很大可能遇到最后一位8位01串不足8位时,将01