Java 为哈夫曼编码分配位
我找不到为字母指定0和1的方法。我修正了我的优先级队列,这样它会首先将所有节点放入具有最高优先级的树中。我不知道如何分配每个字母的值。我曾考虑过使用顺序遍历,但我一直在想,当向字母中添加位时,代码会是什么样子。非常感谢您的帮助!我的节点类如下: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 = ""
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分配给右分支。从顶部到底部的遍历就是该字母的二进制代码