zoukankan      html  css  js  c++  java
  • LeetCode208:Implement Trie (Prefix Tree)

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

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

    Hide Tags Data Structure Trie

    实现一棵Trie树以及实现查询的功能,依据上一篇文章中的分析和伪代码能够非常迅速地实现:
    runtime:68ms

    class TrieNode {
    public:
        // Initialize your data structure here.
        TrieNode() {
                words=0;
                prefixs=0;
                for(int i=0;i<26;i++)
                   edges[i]=NULL; 
            }
            int words;
            int prefixs;
            TrieNode* edges[26];
    };
    
    class Trie {
    public:
        Trie() {
            root = new TrieNode();
        }
    
        // Inserts a word into the trie.
        void insert(string word) {
                insertHelper(root,word,0);
        }
    
        // Returns if the word is in the trie.
        bool search(string word) {
                return searchHelper(root,word,0)!=0;
        }
    
        // Returns if there is any word in the trie
        // that starts with the given prefix.
        bool startsWith(string prefix) {
                return startsWithHelper(root,prefix,0)!=0;
        }
    
        void insertHelper(TrieNode * node,string &word,int pos) {
            if(pos==word.size())
            {
                node->words++;
                node->prefixs++;
            }
            else
            {
                node->prefixs++;
                int char_code=word[pos]-'a';
                if(node->edges[char_code]==NULL)
                    node->edges[char_code]=new TrieNode();
                insertHelper(node->edges[char_code],word,pos+1);
            }
        }
    
        int searchHelper(TrieNode * node,string &word,int pos)
        {
            int char_code=word[pos]-'a';
            if(pos==word.size())
                return node->words;
            else if(node->edges[char_code]==NULL)
                return 0;
            else 
                return searchHelper(node->edges[char_code],word,pos+1);
        }
    
        int startsWithHelper(TrieNode * node,string &word,int pos)
        {
            int char_code=word[pos]-'a';
            if(pos==word.size())
                return node->prefixs;
            else if(node->edges[char_code]==NULL)
                return 0;
            else
                return startsWithHelper(node->edges[char_code],word,pos+1);
        }
    
    private:
        TrieNode* root;
    };
    
    // Your Trie object will be instantiated and called as such:
    // Trie trie;
    // trie.insert("somestring");
    // trie.search("key");
  • 相关阅读:
    【BUAA软工】Beta阶段设计与计划
    Visual Lab Online —— 事后分析
    Alpha阶段项目展示
    Visual Lab Online —— Alpha版本发布声明
    【BUAA软工】Alpha阶段测试报告
    Scrum Meeting #10 2020/04/19
    BUAA-OO-第一单元总结
    [软工顶级理解组] 0520第26次会议
    [软工顶级理解组] 0519第25次会议
    [软工顶级理解组] 0517第24次会议
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7121078.html
Copyright © 2011-2022 走看看