public boolean isAnagramOrSubAnagram(Word word) {
Character minCharacter = word.getMinCharacter();
Stack<TrieNode> stack = new Stack<>();
stack.add(root);
while (!stack.isEmpty()) {
TrieNode node = stack.pop();
for (Entry<TrieKey, TrieNode> entry : node.getChildren().entrySet()) {
char character = entry.getKey().getCharacter();
if (character < minCharacter) {
stack.add(entry.getValue());
} else if (character > minCharacter) {
break;
} else if (entry.getKey().getCount() >= word.getCharacterCount(minCharacter)) {
if (doesMinWordCharacterNodeContainAnagram(entry, word)) {
return true;
}
}
}
}
return false;
}