我有一個霍夫曼樹和一個角色,我想要返回霍夫曼樹內應該是那個角色的編碼。誰能告訴我爲什麼我的代碼產生錯誤?
我已經實現了它使用廣度優先遍歷方法,每次我檢查左右樹,我檢查樹的數據是否等於我正在尋找的字符。但是,每次我向右或向左移動時,都會在編碼中添加0或1。最終,當我找到與樹的數據相同的字符時,我會返回該樹的編碼值。
代碼:
public static String findCharEncoding(BinaryTree<CharProfile> bTree, char character) {
Queue<BinaryTree<CharProfile>> treeQueue = new LinkedList<BinaryTree<CharProfile>>();
// Create a TreeWithEncoding object from the given arguments and add it to the queue
treeQueue.add(bTree);
while (!treeQueue.isEmpty()) {
BinaryTree<CharProfile> t = treeQueue.remove();
-> if (t.getLeft().getData().getCharacter() == character) {
return t.getLeft().getData().getEncoding();
}
if (t.getLeft() != null) {
t.getLeft().getData().setEncoding(t.getLeft().getData().getEncoding() + "0");
treeQueue.add(t.getLeft());
}
if (t.getRight().getData().getCharacter() == character) {
return t.getRight().getData().getEncoding();
}
if (t.getRight() != null) {
t.getRight().getData().setEncoding(t.getRight().getData().getEncoding() + "1");
treeQueue.add(t.getRight());
}
}
// If it gets to here, the while loop was unsuccessful in finding the encoding
System.out.println("Unable to find.");
return "-1";
}
我已經實現如下:
for (int i = 0; i < charOccurrences.size(); i++) {
char character = charOccurrences.get(i).getCharacter();
charOccurrences.get(i).setEncoding(findCharEncoding(huffmanTree, character));
System.out.println(charOccurrences.get(i).getEncoding());
}
CharProfile是保存字符值,字符和編碼的概率自定義類。
它在我用箭頭指示的行if (t.getLeft().getData().getCharacter() == character) {
處不斷返回一個NullPointerExceptionError。我已經嘗試過,但我似乎無法弄清楚爲什麼。
也許你的't.getData()'爲空。你已經檢查了'2 if's',剩下的'two if's''bare'。你也應該把它們放在'if(t.getData()!= null)'的檢查中。 –