繁体   English   中英

如何在压缩后扩展一个霍夫曼节点

[英]how to expand a huffman node after compression

我将所有的霍夫曼节点折叠成一个节点并试图通过该节点构建一个树并为每个角色(霍夫曼叶)创建一个代码,但我无法管理它

我已经尝试编写一个方法,但它不起作用,因为它在为第一个字符创建第一个代码时停止

这是我的方法:

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

通常最好只有一个return语句而不是多个return语句。 您的代码不会访问正确的节点,因为您在访问代码之前返回。 这样的东西将访问每个节点。 您可能需要稍微使用结果的格式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM