簡體   English   中英

嘗試在Java中實現Trie數據結構

[英]Trying to implement a trie data structure in java

我正在嘗試制作一個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;  
}

根TrieNode []鏈接用新的TrieNode [26]實例化; 但是那些26沒有分配有效的對象。
下面呢?

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

我想通了,我只是檢查節點是否為空:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM