字典树是哈希树的变种, 它采用公用前缀的方式来提高效率, 刚开始以为公用前缀, 空间会节省, 后来想想, 空间也不是节省, 因为每一个都有26个指针(这里假设都是小写字母的话), 不过他的时间复杂度是常数级的, 效率非常高, O(1)的复杂度, 它是典型的空间换时间, 他常用的功能是增删查, 其实删除并不算太常用, 增加和查找用的比较多点.具体的实现代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 //结构体里面可以灵活的加一些东西,根据功能来加 5 typedef struct Node{ 6 int isWord;//标记是否到这里是个单词 7 struct Node *next[26];//26个子孩子, 8 }Node, *PNode; 9 10 void add_word(PNode *root, char *word)//将指定单词添加到字典树 11 { 12 PNode node; 13 int len = strlen(word); 14 int i = 0; 15 PNode ptr = *root; 16 while(i < len) 17 { 18 if(ptr->next[word[i] - 'a'] == NULL) 19 { 20 node = (PNode)malloc(sizeof(Node)); 21 for(int j = 0; j < 26; j++) 22 { 23 node->isWord = 0; 24 node->next[j] = NULL; 25 } 26 ptr->next[word[i] - 'a'] = node; 27 } 28 ptr = ptr->next[word[i] - 'a']; 29 i++; 30 } 31 ptr->isWord = 1;//最后标记这个点是单词的结尾 32 } 33 34 void search_word(PNode root, char *word)//查找单词,递归方式 35 { 36 if(word[0] != '