Java 哈夫曼树代码 "Decode" 方法无效

Java Huffman tree code "Decode" method not working

我研究这个方法有一段时间了,我很确定这是一个简单的解决方案。在我的一生中,我无法弄清楚为什么每当我传递 [false, true, true, false, false, false, false, false, true, true, false, true, false, true, false, false, true, true, false, false, true, true, true, false, true, true] 的布尔数组时我的代码 returns strin。出于某种原因,'g' 从未进入字符串,我似乎无法弄清楚为什么。

public String decodeIter(boolean[] coding)
{
    String str = "";
    Node current = root;
    int i = 0;
    while(i < coding.length)
    {
        if(current != null)
        {
            if(current.left == null && current.right == null)
            {
                LeafNode leaf = (LeafNode) current;
                str += leaf.data;
                current = root;
            } else {
                if(coding[i] == true)
                {
                    current = current.right;
                    i++;
                } else {
                    current = current.left;
                    i++;
                }
            }
        }
    }

    return str;
}

如有任何帮助,我们将不胜感激。

问题将是,当您阅读编码中的最后一个条目并将您定向到您的角色时,您会立即 i++,这将使循环中的 while 条件为假,因此最后一个 str+= 永远不会被调用是因为它的条件从未被测试过。可能有更清洁的补救措施,但一种方法是在 return str.

之前插入以下内容
if(current!= null && current.left == null && current.right == null)//short circuit prevents dereferencing null pointer
{
    LeafNode leaf = (LeafNode) current;
    str += leaf.data;
    //no need to set current = root, we are leaving anyway
}

那应该为您抓取最后一个字符。