我需要创建压缩霍夫曼树的代码。 (如果你向右移动,如果你向左移动,则为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;
}
答案 0 :(得分:0)
您似乎无法访问正确的子女。变化
result = getPath(root.getLeftChild(),toFind, path + '1');
到
result = getPath(root.getRightChild(),toFind, path + '1');