0

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;  
}
4

2 に答える 2

1

ルート TrieNode[] リンクは、新しい TrieNode[26] でインスタンス化されます。しかし、それらの 26 には有効なオブジェクトが割り当てられていません。
下記はいかがでしょうか?

for(int i=0;i<26;i++){
         TrieNode obj = new TrieNode();
                  obj.validPrefix=false;
        this.links[i] = obj;
    }
于 2013-05-12T02:41:03.217 に答える
0

私はそれを理解しました、ノードがnullかどうかを確認するだけです:

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;
}
于 2013-05-12T19:40:46.567 に答える