我正在尝试创建一个TrieNode类。每个节点都有一个字母,链接(它连接到的其他节点),一个布尔值声明该节点是否标记完整单词的结尾,我试图添加另一个布尔说天气它是有效前缀的一部分。我遇到问题的部分是前缀部分。我正在尝试制作一个isValidPrefix方法。
我的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;
}
}
在我的add方法中,每次添加节点时,我都将节点validPrefix
设置为true。
我是有效的前缀方法:
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;
}
答案 0 :(得分:1)
根TrieNode []链接用新的TrieNode实例化[26];但那些26没有分配有效对象。
下面怎么样?
for(int i=0;i<26;i++){
TrieNode obj = new TrieNode();
obj.validPrefix=false;
this.links[i] = obj;
}
答案 1 :(得分: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;
}