Вопрос по реализации Tr ie структуры данных - PullRequest
0 голосов
/ 24 марта 2020

У меня есть вопрос о вложенном классе с точки зрения реализации 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<>();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...