Я пытаюсь реализовать метод, который будет хранить все слова в структуре данных Trie в списке в Java.Это мой класс Node:
class Node {
char c;
HashMap<Character, Node> children = new HashMap<Character, Node>();
boolean isCompleteWord;
public Node(char c) {
this.c = c;
isCompleteWord = false;
}
public Node() {
}
}
Я использую HashMap для хранения дочерних символов в качестве ключей и дочерних узлов в качестве значений.Узлу, завершающему слово, будет присвоено поле isCompleteWord значение true.
Методы добавления всех слов в список:
List<String> collectWords(char c) {
List<String> words = new ArrayList<>();
String word = Character.toString(c);
Node node = root.children.get(c);
collectWordsHelper(words, node, word);
return words;
}
void collectWordsHelper(List<String> words, Node node, String word) {
for (char i = 'a'; i <= 'z'; i++) {
if (node.children.containsKey(i)) {
System.out.println(i); // prints the right letters
Node child = node.children.get(i);
word += i;
if (child.isCompleteWord && !words.contains(word)) {
words.add(word);
collectWordsHelper(words, child, "");
}
collectWordsHelper(words, child, word);
}
}
}
В настоящее время, если я сохранил в Trie слова "борода "," жирный "," варево ", когда я печатаю список слов, начинающихся с префикса" b ", я получаю:
[beard, beold, beorew]
Что я ожидаю:
[beard, bold, brew]
Я думаю, мне нужен способ сброса строкового слова всякий раз, когда я нашел слово, вместо добавления следующих символов.