Trie树的定义
Trie树,又被称为字典树、单词查找树,是一种哈希树变种。常用于统计、排序和保存大量的字符串,如搜索引擎系统中的文本词频统计、拼写的智能补全、字符串排序、最长公共前缀等。优点在于,利用字符串的公共前缀减少查询时间,查找效率比哈希树高。
Trie树的实现
Trie树结构
对于Trie树的每一个节点,应当有一个标志位表示从根节点到当前节点的字符串是否存在,每个节点应当有26个儿子节点(与字符数量相同)。
1 2 3 4 5 6 7 8 9 10
   | class TrieNode{ private:     bool isEnd;     TrieNode* next[26]; public:     void TrieNode();     void insert(string str);     bool search(string str);     bool startWith(string prefix); }
  | 
 
Init
初始化一个Trie树,树的根节点应为空。
1 2 3 4
   | void TrieNode(){     isEnd = false;     memset(next, 0, sizeof(next)); }
  | 
 
Insert
1 2 3 4 5 6 7 8 9
   | void insert(string str){     Trie* node = this;     for(char ch: str){         if(node->next[ch-'a'] == nullptr)             node->next[ch-'a'] = new Trie();         node = node->next[ch-'a'];     }     node->isEnd = true; }
  | 
 
Search
1 2 3 4 5 6 7 8 9
   | bool search(string str){     Trie* node = this;     for(char ch: str){         node = node->next[ch-'a'];         if(node == nullptr)             return false;     }     return node->isEnd; }
  | 
 
StartWith
1 2 3 4 5 6 7 8 9
   | bool StartWith(string str){     Trie* node = this;     for(char ch: str){         node = node->next[ch-'a'];         if(node == nullptr)             return false;     }     return true; }
  | 
 
哈希树
哈希树(HashTree)是一种持久性数据结构,用于实现集合和映射。通过质数分辨法建立哈希树,从第二层开始,每层的节点数为连续质数(2,3,5,7…),从左至右分别为对于该质数的余数。