【问题标题】:how to expand a huffman node after compression压缩后如何扩展霍夫曼节点
【发布时间】:2019-05-14 19:03:02
【问题描述】:

我将所有霍夫曼节点折叠成一个节点,并尝试通过该节点构建一棵树并为每个字符(霍夫曼叶)制作代码,但我无法管理它

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

这是我的方法:

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

【问题讨论】:

  • 请发布您创建树的方式、示例输入和预期输出。
  • @BakonJarser 我写的太长了

标签: java algorithm compression nodes huffman-code


【解决方案1】:

通常最好使用单个 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多