[LeetCode] Implement Trie (Prefix Tree)

Implement Trie (Prefix Tree)


Implement a trie with insertsearch, and startsWith methods.

Note:
You may assume that all inputs are consist of lowercase letters a-z.

解题思路:

前缀树。由于值设定为在a-z之间,我们可以假设是一棵26叉树。注意,每个节点还需要加入一个标记,表明从根到这个节点的路径组成的序列是否为单词。

class TrieNode {
public:
    // Initialize your data structure here.
    TrieNode() {
        this->bWord=false;
        for(int i=0; i<26; i++){
            this->son[i] = NULL;
        }
    }
    
    TrieNode* getSon(char c){
        return this->son[c-'a'];
    }
    
    void setSon(int i, TrieNode* node){
        this->son[i] = node;
    }
    
    bool isWord(){
        return this->bWord;
    }
    
    void markAsWord(){
        this->bWord = true;
    }
private:
    bool bWord;
    TrieNode* son[26];
};

class Trie {
public:
    Trie() {
        root = new TrieNode();
    }

    // Inserts a word into the trie.
    void insert(string s) {
        int len = s.length();
        TrieNode* parent = root, *node;
        for(int i=0;i<len; i++){
            node = parent->getSon(s[i]);
            if(node == NULL){
                node=new TrieNode();
                parent->setSon(s[i] - 'a', node);
            }
            parent = node;
        }
        parent->markAsWord();
    }

    // Returns if the word is in the trie.
    bool search(string key) {
        int len = key.length();
        TrieNode* node = root;
        for(int i=0; i<len; i++){
            node = node->getSon(key[i]);
            if(node==NULL){
                return false;
            }
        }
        return node->isWord();
    }

    // Returns if there is any word in the trie
    // that starts with the given prefix.
    bool startsWith(string prefix) {
        int len = prefix.length();
        TrieNode* node = root;
        for(int i=0; i<len; i++){
            node = node->getSon(prefix[i]);
            if(node==NULL){
                return false;
            }
        }
        return true;
    }

private:
    TrieNode* root;
};

// Your Trie object will be instantiated and called as such:
// Trie trie;
// trie.insert("somestring");
// trie.search("key");


0 条评论

    发表评论

    电子邮件地址不会被公开。 必填项已用 * 标注