java - 如何在压缩后扩展霍夫曼节点

标签 java algorithm compression nodes huffman-code

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

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

这是我的方法:

    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/

相关文章:

java - EAP 7.3 JPA+Hibernate REST 双向 ManyToOne 关系序列化(非 SPRING)

java - 层次结构的相似度算法

c++ - 比std::nth_element更快的东西

java - 使用 java 对谷歌地球图像进行 kmz 压缩

swift - 原生swift zip解压

java - 当某些类的接口(interface)方法的实现相同时,您如何处理?

java - 在 Android 上分析来自麦克风的声音(谐波、分音、泛音)

c# - 将矩形图像拆分为多边形以模拟 splinter 玻璃

javascript - 需要推荐 Node.js Gzip 静态资源

java - 使用 Glassfish 3.1.2 和 JAAS 登录 JSF 2.0