获取霍夫曼节点的路径

时间:2016-12-09 18:02:43

标签: java huffman-code

我试图用任何文件的byte []创建一个Huffman树然后压缩它。为了创建BitSequence,我创建一个字节的HashMap和相应的字符串值,该值等于其节点的路径。当手工完成它时,我得到的BitSequence长度远远超过我的程序推出的长度。这是我创建值的HashMap的代码,其中bytes是该节点的字节值:

 public static HashMap<Byte, String> getPath(Node n)
  {
    HashMap<Byte, String> map = new HashMap<Byte, String>();
    buildPath(n, "", map);
    return map;


  }
  public static void buildPath(Node n, String s, HashMap<Byte, String> map) {
   if(n != null)
   {
     if (n.left != null){
      buildPath(n.left, s+"0", map);
   }

   if (n.right != null){
    buildPath(n.right, s+"1", map);
   }
   if(n.left == null && n.right == null)
   {
     map.put(bytes, s);
     return;
   }
   }
   return;
  }

然后我从文件中查看原始字节数组,并使用生成的HashMap将Huffman路径附加到我将使用Huffman树本身压缩的序列,以便稍后解码。我生成路径的方式是否有错误,或者我的问题可能存在于其他地方?

1 个答案:

答案 0 :(得分:0)

我看到你的方法是静态的,所以我假设变量字节也是如此。这不会将字节值放入HashMap中,而是继续将null放在那里。摆脱静态,然后它应该正确地将字节值放入地图。您可以将其设为私有,并创建一个返回它的getByte()方法,或者您可以简单地将字节设为public并使用您正在使用的任何对象调用它。