簡體   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