获取霍夫曼树的代码有困难

时间:2015-04-18 00:55:16

标签: recursion tree binary-tree huffman-code

我需要创建压缩霍夫曼树的代码。 (如果你向右移动,如果你向左移动,则为O.)

现在,代码数组将获得正确的第一个代码,但之后只会返回null。

除了array和arrayList之外,我不允许使用任何instance/global变量或任何预定义的java类

public static String compress(final BinaryNodeInterface<Character> root, final String message)
{
    String[] codes;
    ArrayList<Character> letter = new ArrayList<Character>();
    String codeString = "";
    boolean addChar=true;

    for(int i =0; i<message.length();i++)
    {
        for(int j=0;j<letter.size();j++)
            if(message.charAt(i)==letter.get(j))
                addChar=false;
            else
                addChar=true;
        if(addChar)               
            letter.add(message.charAt(i));
    }

    codes = new String[letter.size()];
    for(int i=0;i<letter.size();i++)
        codes[i]=(getPath(root,letter.get(i),""));

    return "";  // Do not forget to change this line!!!
}

private static String getPath(final BinaryNodeInterface<Character> root, char toFind, String path)
{
    String result;
    if (! root.isLeaf()) {
        if ((result = getPath(root.getLeftChild(),toFind, path + '0')) == null) {
            result = getPath(root.getLeftChild(),toFind, path + '1');
        }
    }
    else {
        result = (toFind == root.getData()) ? path : null;
    }
    return result;
}

1 个答案:

答案 0 :(得分:0)

您似乎无法访问正确的子女。变化

result = getPath(root.getLeftChild(),toFind, path + '1');

result = getPath(root.getRightChild(),toFind, path + '1');