[syswj@host 0813]$ cat dic_tree.cpp #include <iostream> #include <stdio.h> #define MAX 26 using namespace std; typedef struct TrieNode { int ncount; struct TrieNode *next[MAX]; }TrieNode; void init(TrieNode **pRoot)//初始化 { *pRoot = NULL; } TrieNode* create()//创建新节点 { TrieNode *a = new TrieNode; a->ncount = 0; for(int i = 0; i < MAX; ++i) a->next[i] = NULL; return a; } void insert(TrieNode **pRoot, char *s)//插入 { int i, k; TrieNode *p; if(!(p = *pRoot)) { p = *pRoot = create(); } i = 0; while(s[i]) { k = s[i++] - ‘a‘; if(!p->next[k]) { p->next[k] = create(); } p = p->next[k]; } p->ncount++; } int search(TrieNode *pRoot, char *s)//查找 { TrieNode *p; int i, k; if(!(p = pRoot)) { return 0; } i = 0; while(s[i]) { k = s[i++] - ‘a‘; if(p->next[k] == NULL) return 0; p = p->next[k]; } return p->ncount; } int main(int argc, const char *argv[]) { TrieNode *p; init(&p); char a[20] = {"abc"} ; insert(&p, a); insert(&p, a); insert(&p,"bcd"); insert(&p,a); cout << search(p,a) << endl; cout << search(p,"bcd") << endl; return 0; }
原文:http://www.cnblogs.com/wj9012/p/3910273.html