获取霍夫曼节点的路径

Getting path to Huffman Nodes

我正在尝试从任何文件的字节 [] 中创建霍夫曼树,然后将其压缩。为了创建 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 将霍夫曼路径附加到一个序列,我将用霍夫曼树本身压缩该序列,以便稍后对其进行解码。是我生成路径的方式有误,还是我的问题出在其他地方?

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