Trie树,也称作是字典树,是一种哈希树的变种,查询效率较高。Trie树可以用于统计或者排序大量的字符串,比如对一系列字符串按照字典序排序。
字典树是一个多叉树,每一个节点上存储的不是一个字符串,而是一个字符,从根节点到某个节点的路径上的所有字符串联起来就构成了一个字符串。
对于N个字符串,如果其平均长度为M,则建立字典树的算法复杂度为O(M*N),在字典树上查找某个长度为M的字符串的算法复杂度O(M),字典树可以边搜索边建立,因此总的查找算法复杂度为O(M*N)。
C语言实现Trie树(字典树)的插入查找删除与遍历操作如下:/*
* Trie tree algorithm dmo
*/
# include
# include
# include
#define MAXSTRLEN 1024
typedef struct TRIETREENODE
{
int cnt; /*统计各个单词出现的次数 初始化为0*/
struct TRIETREENODE *next[26]; /*假设单词只有字母*/
}TrieTreeNode;
TrieTreeNode *createTrieTreeNode(); /*新建并初始化一个节点*/
int InsertTrieTreeNode(TrieTreeNode *ptrRoot, char *str); /*插入一个单词*/
int DeleteTrieTreeNode(TrieTreeNode *ptrRoot, char *str); /*删除一个单词*/
int SearchTrieTree(TrieTreeNode *ptrRoot, char *str); /*搜索Trie树*/
void TraverseTrieTree(TrieTreeNode *ptrRoot); /*遍历Trie树*/
void DestroyTrieTree(TrieTreeNode *ptrRoot); /*销毁Trie树*/
/*新建并初始化一个节点*/
TrieTreeNode *createTrieTreeNode()
{
TrieTreeNode *treeNode = NULL;
/*申请内存*/
treeNode = (TrieTreeNode*)malloc(sizeof(TrieTreeNode));
if(treeNode == NULL)
{
printf("Error! malloc error.\n");