У меня есть вопрос о вложенном классе с точки зрения реализации Tr ie
Я хочу знать, в чем отличие определения класса TrieNode внутри класса Tr ie и вне класса Tr ie
В случае, если я реализую класс TrieNode вне класса Tr ie, когда я пытаюсь использовать метод Insert, он сохраняет исключение sayig NullPointException в (Tr ie. java: 14),
Таким образом, любой может объяснить, в чем разница между двухсторонним и дальнейшим поиском решения, если я хочу устранить ошибку Nullpointexception при реализации класса TrieNode вне класса Tr ie.
здесь мой код
public class Trie {
private final TrieNode root;
public Trie () {
root = new TrieNode();
}
public void insert (String word) {
TrieNode current = root;
for (int i = 0; i < word.length(); i++) {
char ch = word.charAt(i);
TrieNode node = current.children.get(ch);
if (node == null) {
node = new TrieNode();
current.children.put(ch, node);
}
current = node;
}
//mark the current nodes endOfWord as true
current.isEnd = true;
}
public boolean search (String word) {
TrieNode current = root;
for (int i = 0; i < word.length(); i++) {
char ch = word.charAt(i);
if (current.children.get(ch) == null) {
return false;
}
current = current.children.get(ch);
}
return current.isEnd;
}
public void delete (String word) {
delete(root, word, 0);
}
private boolean delete (TrieNode node, String word, int index) {
if (index == word.length()) {
if (!node.isEnd) {
return false;
}
node.isEnd = false;
return node.children.size() == 0;
}
if (node == null) {
return false;
}
node = node.children.get(word.charAt(index));
boolean shouldBeDeleted = delete(node, word, index + 1);
if (shouldBeDeleted) {
node.children.remove(word.charAt(index));
return node.children.size() == 0;
}
return false;
}
public static void main(String[] args) {
Trie trie = new Trie();
trie.insert("abcd");
// System.out.println(trie.search("abcd"));
}
}
класс TrieNode разделен на Tr ie класс
public class TrieNode {
boolean isEnd;
Map<Character, TrieNode> children;
public void TrieNode () {
this.isEnd = false;
this.children = new HashMap<>();
}
}