私が尋ねたこの質問を参照して:トライで最も長い単語を見つける方法は?
回答に示されている擬似コードの実装に問題があります。
findLongest(trie):
//first do a BFS and find the "last node"
queue <- []
queue.add(trie.root)
last <- nil
map <- empty map
while (not queue.empty()):
curr <- queue.pop()
for each son of curr:
queue.add(son)
map.put(son,curr) //marking curr as the parent of son
last <- curr
//in here, last indicate the leaf of the longest word
//Now, go up the trie and find the actual path/string
curr <- last
str = ""
while (curr != nil):
str = curr + str //we go from end to start
curr = map.get(curr)
return str
これは私が私の方法のために持っているものです
public static String longestWord (DTN d) {
Queue<DTN> holding = new ArrayQueue<DTN>();
holding.add(d);
DTN last = null;
Map<DTN,DTN> test = new ArrayMap<DTN,DTN>();
DTN curr;
while (!holding.isEmpty()) {
curr = holding.remove();
for (Map.Entry<String, DTN> e : curr.children.entries()) {
holding.add(curr.children.get(e));
test.put(curr.children.get(e), curr);
}
last = curr;
}
curr = last;
String str = "";
while (curr != null) {
str = curr + str;
curr = test.get(curr);
}
return str;
}
次の場所でNullPointerExceptionが発生します:
for (Map.Entry<String, DTN> e : curr.children.entries())
メソッドのNullPointerExceptionの原因を見つけて修正し、トライで最長の単語を返すようにするにはどうすればよいですか?