HDU 1251 字典树 #include <iostream> using namespace std; const int kind = 26; struct TreeNode { int count; TreeNode *next[kind]; TreeNode() { count = 1; for(int i = 0; i < kind; i++) next[i] = NULL; } }; void Insert(TreeNode *&root, const char *word) { TreeNode *p = root; int i, branch; i = branch = 0; if(NULL == p) { p = new TreeNode; root = p; } while(word[i]) { branch = word[i] - 'a'; if(p->next[branch]) p->next[branch]->count++; else p->next[branch] = new TreeNode; i++; p = p->next[branch]; } } int Search(TreeNode *&root, char *word) { TreeNode *p = root; if(!p) return 0; int i, branch, ans; i = branch = ans = 0; while(word[i]) { branch = word[i] - 'a'; if(NULL == p->next[branch]) return 0; ans = p->next[branch]->count; i++; p = p->next[branch]; } return ans; } int main() { char word[10], ask[10]; TreeNode *root = NULL; while(gets(word)) { if(word[0] == '\0') break; Insert(root, word); } while(gets(ask)) cout<<Search(root, ask)<<endl; return 0; }