trie树:用来快速存储和查找字符串集合的一个数据结构.

字符串要么都是小写字母,要么都是大写字母,要么是大写字母,要么是数字,要么是0和1。

trie树可以高效查找整个单词在集合中是否出现过,出现多少次。

数据结构:Trie树_i++

Trie节点需要有个标志位判断是否是结尾,还需要定义多叉树。

struct Trie{
    bool isEnd;
    Trie* next[26];
    Trie(){
        isEnd = false;
        memset(next,0,sizeof(next));
    }
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

操作:创建节点

Trie * createNode(){
    Trie *node=new Trie;
    node->isEnd=false;
    memset(node->next,0,sizeof(node->next));
    return node;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

 操作:插入

void insert(Trie* root,string word){
    Trie* node=root;
    for(char c:word){
        if(node->next[c-'a']==NULL){
            node->next[c-'a']=createNode();
        }
        node=node->next[c-'a'];
    }
    node->isEnd=true;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

 操作:搜索

bool search(Trie*root,string word){
    Trie* node=root;
    for(char c:word){
        if(node==NULL)return false;
        node=node->next[c-'a'];
    }
    return node->isEnd;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

 操作:删除

void deleteTrie(Trie* node){
    if(node){
        for(int i=0;i<26;i++){
            deleteTrie(node->next[i]);
        }
        delete node;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.