前缀树(字典树)数组实现和链表实现

使用数组进行内部实现

class Trie {
public:
    /** Initialize your data structure here. */
    int cnt=0;
    int nex[100005][26];
    bool exist[100005];
    Trie() {
        cnt = 0;
        memset(nex, 0,sizeof(nex));
        memset(exist, 0,sizeof(exist));
    }
    
    /** Inserts a word into the trie. */
    void insert(string word) {
        int p =0;
        for(int i=0;i

使用链表进行内部实现

struct Trienode{
    bool exist=false;
    Trienode* nex[26]={NULL};
};
class Trie {
public:
    /** Initialize your data structure here. */
    Trienode a;
    int cnt=0;
    Trie() {
        Trienode* tmp =new Trienode;
        a = *tmp;
        a.exist=false;
    }
    
    /** Inserts a word into the trie. */
    void insert(string word) {
        Trienode *p = &a;
        for(int i=0;inex[word[i]-'a']){
                Trienode* tmp = new Trienode;
                p->nex[word[i]-'a']=tmp;
                p=tmp;
            }
            else{
                p=p->nex[word[i]-'a'];
            }
        }
        p->exist=true;
    }
    
    /** Returns if the word is in the trie. */
    bool search(string word) {
        Trienode p = a;
        for(int i=0;i

 

 

 

 

你可能感兴趣的:(数据结构)