0

我很难找到一种方法来为字母分配 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;
    }
}
4

2 回答 2

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);
于 2012-11-26T01:20:43.497 回答
0

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

于 2012-11-26T02:33:22.663 回答