我很难找到为字母分配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;
}
}
答案 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分配给右分支。从上到下的遍历就是那个字母的二进制代码。