为霍夫曼编码分配位

时间:2012-11-25 23:42:38

标签: java traversal huffman-code

我很难找到为字母分配0和1的方法。我修复了我的优先级队列,以便它将所有节点首先放入具有最高优先级的树中。我没有关于如何为每个字母分配其值的想法。我正在考虑使用inorder遍历,但是在将字符添加到字母时,我仍然坚持代码的样子。非常感谢所有帮助!我的节点类如下:

private class Node{
    Node right;
    Node left;
    Node parent;
    char letter;
    int value;
    String binaryValue = "";
    private Node(char c, int in, Node parent, Node left, Node right){
        letter = c;
        value = in;
        this.left = left;
        this.right = right;
        this.parent = parent;
    }
    @SuppressWarnings("unused")
    private void setRight(Node right){
        this.right = right;
    }
    @SuppressWarnings("unused")
    private void setLeft(Node left){
        this.left = left;
    }
    private void setParent(Node parent){
        this.parent = parent;
    }
    private Node getParent(){
        return parent;
    }
    @SuppressWarnings("unused")
    private void setWeight(int weight){
        this.value += weight;
    }
    private void setBinary(String binary){
        binaryValue = binary;
    }
    private String getBinary(){
        return binaryValue;
    }
}

2 个答案:

答案 0 :(得分:0)

不确定您的要求是什么,但这可能是您问题的一个解决方案

char letter = c;
  byte[] bytes = letter.getBytes();
  StringBuilder binary = new StringBuilder();
  for (byte b : bytes)
  {
     int val = b;
     for (int i = 0; i < 8; i++)
     {
        binary.append((val & 128) == 0 ? 0 : 1);
        val <<= 1;
     }
     binary.append(' ');
  }
  System.out.println(binary);

答案 1 :(得分:0)

从顶部到字母所需的分支数是位数。只需将0分配给左分支,将1分配给右分支。从上到下的遍历就是那个字母的二进制代码。