在TrieNode中插入时出现NullPointerException

时间:2016-02-11 06:04:05

标签: java trie

我有以下代码,我试图在TrieNode中实现addWord(..)算法。  AutoCompleteDictionaryTrie.java

 public boolean addWord(String word) {
   // TODO: Implement this method
   char[] chArr = word.toLowerCase().toCharArray();
   int length = word.length();
   boolean flag = false;
   TrieNode tNode = null;
   int i = 0;
   for (char c: chArr) {
    tNode = root.insert(c);
    i++;
    if (i == length) {
     tNode.setEndsWord(true);
     flag = true;
    }
    size++;
    return flag;
   }

   @Override
   public boolean isWord(String s) {
    // TODO: Implement this method
    char[] chArr = s.toLowerCase().toCharArray();
    boolean flag = false;
    TrieNode tNode = root;
    String rStr = "";
    int i = 0, length = s.length();
    for (char c: chArr) {
     tNode = tNode.getChild(c);
     rStr += c;
     if (i == length && tNode.endsWord()) {
      if (rStr.equals(s.toLowerCase()))
       flag = true;
     }
     i++;
    }
    return flag;
   }
如果我先插入addWord(..)然后再team tea,我会NullPointerException

TrieNode.java

public TrieNode getChild(Character c)
    {
        return children.get(c);
    }

    public TrieNode insert(Character c)
    {
        if (children.containsKey(c)) {
            return null;
        }

        TrieNode next = new TrieNode(text + c.toString());
        children.put(c, next);
        return next;
    }


    public String getText()
    {
        return text;
    }


    public void setEndsWord(boolean b)
    {
        isWord = b;
    }


    public boolean endsWord()
    {
        return isWord;
    }

我不想在TrieNode中添加任何新方法来填充它。我曾尝试使用getChildren()方法返回HashMap<Character, TrieNode> children对象,但这也没用。请帮我解决这个问题。我确信我错过了一些东西。

1 个答案:

答案 0 :(得分:0)

这是由:

引起的
    if (children.containsKey(c)) {
        return null;
    }

对于插入词团队,他们都以 t 开头,上面的代码将为返回null >茶一词。但是在下面的代码段中,它仍在调用setEndsWord,因此会抛出NullPointerException

tNode.setEndsWord(true);