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;
    }