Implement Trie (Prefix Tree)

来源:互联网 发布:御城河商家数据保镖 编辑:程序博客网 时间:2024/04/28 07:05

Implement a trie with insert, search, and startsWith methods.

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

class TrieNode {public:    char value;    bool isEnd;    int count;    vector<TrieNode*> children;    TrieNode() : value(' '), isEnd(false), count(0)    {}    TrieNode(char ch) : value(ch), isEnd(false), count(0)    {}    TrieNode* subNode(char ch)    {        for (vector<TrieNode*>::iterator it = children.begin(); it != children.end(); it++)        {            if ((*it)->value == ch)            {                return *it;            }        }        return NULL;    }    ~TrieNode()    {        for (vector<TrieNode*>::iterator it = children.begin(); it != children.end(); it++)        {            delete *it;        }    }};class Trie {public:    Trie() {        root = new TrieNode();    }    // Inserts a word into the trie.    void insert(string word) {        if (search(word))        {            return;        }        TrieNode *curr = root;        for (int i = 0; i < word.length(); i++)        {            TrieNode *child = curr->subNode(word[i]);            if (child == NULL)            {                TrieNode *temp = new TrieNode(word[i]);                curr->children.push_back(temp);                curr = temp;            }            else            {                curr = child;            }            curr->count++;        }        curr->isEnd = true;     }    // Returns if the word is in the trie.    bool search(string word) {        TrieNode *curr = root;        for (int i = 0; i < word.length(); i++)        {            curr = curr->subNode(word[i]);            if (curr == NULL)            {                return false;            }        }        return curr->isEnd;    }    // Returns if there is any word in the trie    // that starts with the given prefix.    bool startsWith(string prefix) {        TrieNode *curr = root;        for (int i = 0; i < prefix.length(); i++)        {            curr = curr->subNode(prefix[i]);            if (curr == NULL)            {                return false;            }        }        return true;    }        ~Trie()    {        delete root;    }private:    TrieNode* root;};// Your Trie object will be instantiated and called as such:// Trie trie;// trie.insert("somestring");// trie.search("key");


0 0
原创粉丝点击