我将所有霍夫曼节点折叠成一个节点并尝试通过该节点构建一棵树并为每个字符(霍夫曼叶)制作代码但我无法管理它
我已经尝试编写一个方法,但它没有用,因为它在为第一个字符创建第一个代码时停止
这是我的方法:
public String createKey(Node node,String s){
if(node.right==null&&node.left==null) {
hashMap.put(node, s);
s="";
}
if (node.left!=null)
return createKey(node.left,s+"0");
if(node.right!=null)
return createKey(node.right,s+"1");
return s;
}
最佳答案
通常最好有一个返回语句而不是多个返回语句。您的代码没有访问正确的节点,因为您在到达该代码之前返回。这样的事情将访问每个节点。您可能需要稍微调整一下结果的格式。
public String createKey(Node node,String s){
if(node.right == null && node.left == null) {
hashMap.put(node, s);
s="";
}
if (node.left != null)
s += createKey(node.left, s + "0");
if(node.right != null)
s += createKey(node.right, s + "1");
return s;
}
像这样的东西也可以工作,并且可能更容易格式化结果:
public String createKey(Node node,String s){
if(node.right == null && node.left == null) {
hashMap.put(node, s);
s="";
}
else if (node.left != null && node.right != null)
s = createKey(node.left, s + "0") + " " + createKey(node.right, s + "1");
else if (node.left != null)
s = createKey(node.left, s + "0");
else if(node.right != null)
s = createKey(node.right, s + "1");
return s;
}
关于java - 如何在压缩后扩展霍夫曼节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56136960/