2013-05-12 4 views
0

Я пытаюсь создать класс TrieNode. Каждый узел имеет букву, ссылки (другие узлы, к которым она подключается), логическое объявление, если этот узел отмечает конец полного слова, и я пытаюсь добавить еще одну булевую посмертную погоду, это часть действительного префикса. Часть, с которой я столкнулся, - это префиксная часть. Я пытаюсь сделать метод isValidPrefix.Попытка реализовать структуру данных trie в java

Моего TrieNode класс:

class TrieNode 
{ 
    char letter; 
    TrieNode[] links; 
    boolean fullWord; 
    boolean validPrefix; 

    TrieNode(char letter) 
    { 
     this.letter = letter; 
     links = new TrieNode[26]; 
     for(int i=0;i<26;i++){//i keep getting a nullPointer exception 
      this.links[i].validPrefix=false; 
     } 
     this.fullWord = false; 
     this.validPrefix=true; 
    } 
} 

В моем методе надстройки, каждый раз, когда я добавить узел, я установил, что узлы validPrefix истину.

Мой метод действует префикс:

public boolean isValidPrefix(TrieNode root, String word) { 
    int length = word.length(); 
    char[] letters = word.toCharArray(); 
    TrieNode curNode = root; 
    for (int i = 0; i < length; i++){ 
     curNode = curNode.links[letters[i]-97]; 
    } 
    return curNode.validPrefix;//get a nullPointerException 
} 

Вот мой метод добавить для справки

public void insertWord(TrieNode root, String word){//97 is ascii value 
    int length = word.length(); 
    char[] letters = word.toCharArray(); 
    TrieNode curNode = root; 

    for (int i = 0; i < length; i++){ 
     if (curNode.links[letters[i]-97] == null) 
      curNode.links[letters[i]-97] = new TrieNode(letters[i]); 
     curNode = curNode.links[letters[i]-97]; 
     curNode.validPrefix=true; 
    } 
    curNode.fullWord = true; 
} 

ответ

1

Корень TrieNode [] ссылки создается с новым TrieNode [26]; но те 26 не назначены действительным объектом.
Как насчет ниже?

for(int i=0;i<26;i++){ 
     TrieNode obj = new TrieNode(); 
        obj.validPrefix=false; 
     this.links[i] = obj; 
    } 
+0

я пробовал раньше, и до сих пор есть исключения нулевого указателя в IsValid метод –

+0

Я не думаю, что вы будете получить NLPE после предварительно инициализирующих ссылок и validPrefix. Не могли бы вы вставить мне строку? –

+0

Исключение в потоке «основного» java.lang.NullPointerException \t в PrefixTree.isValidPrefix (PrefixTree.java:84) (линия 84 находится в методе isValidPrefix, возвращение заявления в нижней части) –

0

я понял это, я просто проверить, если узел является нулевым или нет:

public static boolean isValidPrefix(TrieNode root, String word){ 
    int length = word.length(); 
    char[] letters = word.toCharArray(); 
    for (int i = 0; i < length; i++){ 
     root = root.links[letters[i]-97]; 
    } 
    if(root==null) 
     return false; 
    return true; 
} 
Смежные вопросы