Java 为哈夫曼编码分配位

Java 为哈夫曼编码分配位,java,traversal,huffman-code,Java,Traversal,Huffman Code,我找不到为字母指定0和1的方法。我修正了我的优先级队列,这样它会首先将所有节点放入具有最高优先级的树中。我不知道如何分配每个字母的值。我曾考虑过使用顺序遍历,但我一直在想,当向字母中添加位时,代码会是什么样子。非常感谢您的帮助!我的节点类如下: private class Node{ Node right; Node left; Node parent; char letter; int value; String binaryValue = ""

我找不到为字母指定0和1的方法。我修正了我的优先级队列,这样它会首先将所有节点放入具有最高优先级的树中。我不知道如何分配每个字母的值。我曾考虑过使用顺序遍历,但我一直在想,当向字母中添加位时,代码会是什么样子。非常感谢您的帮助!我的节点类如下:

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;
    }
}

不确定你到底问了什么,但这可能是解决你问题的一个办法

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);
char字母=c;
字节[]字节=letter.getBytes();
StringBuilder二进制文件=新的StringBuilder();
for(字节b:字节)
{
int val=b;
对于(int i=0;i<8;i++)
{
binary.append((val&128)==0?0:1);

val从顶部到字母的分支数是位数。只需将0分配给左分支,将1分配给右分支。从顶部到底部的遍历就是该字母的二进制代码