trie tree(字典树)

hihocoder题目(http://hihocoder.com/problemset):#1014  trie树

  1 #include <iostream>
  2 using namespace std;
  3 class trieTree
  4 {
  5 public:
  6     trieTree()
  7     {
  8         isword=false;
  9         for (int i=0;i<26;i++)
 10         {
 11             next[i]=NULL;
 12         }
 13     }
 14     ~trieTree()
 15     {
 16         for (int i=0;i<26;i++)
 17         {
 18             if (next[i]!=NULL)
 19             {
 20                 destory(next[i]);
 21             }
 22         }
 23     }
 24     void destory(trieTree* index);
 25     int insertWord(char*);
 26     int searchWord(char*);
 27     int findWord(trieTree* index);
 28 private:
 29     trieTree* next[26];
 30     bool isword;
 31 };
 32 int main()
 33 {
 34     int dictionarySize;
 35     trieTree root;
 36     char word[10];
 37     cin>>dictionarySize;
 38     int i=0;
 39     for(i=0;i<dictionarySize;i++)
 40     {
 41         cin>>word;
 42         root.insertWord(word);
 43     }
 44     cin>>dictionarySize;
 45     for(i=0;i<dictionarySize;i++)
 46     {
 47         cin>>word;
 48         cout<<root.searchWord(word)<<endl;
 49     }
 50     
 51     return 0;
 52 }
 53 int trieTree::insertWord(char* word)
 54 {
 55     trieTree* index=this;
 56     while(*word)
 57     {
 58         if(!index->next[*word-'a'])
 59         {    
 60             index->next[*word-'a']=new trieTree;
 61         }
 62         if (!index->next[*word-'a'])
 63         {
 64             return -1;
 65         }
 66         else
 67         {
 68             index=index->next[*word-'a'];
 69         }
 70         word++;
 71     }
 72     index->isword=true;
 73     return 0;
 74 }
 75 int trieTree::searchWord(char* word)
 76 {
 77     trieTree* index=this;
 78     int count=0;
 79     while(*word)
 80     {
 81         if(index->next[*word-'a']==NULL)
 82         {
 83             return 0;
 84         }
 85         index=index->next[*word-'a'];
 86         word++;
 87     }
 88     count=findWord(index);
 89     return count;
 90 }
 91 int trieTree::findWord(trieTree* index)
 92 {
 93     int count=0;
 94     if(index->isword)
 95         count++;
 96     for(int i=0;i<26;i++)
 97     {
 98         if(index->next[i]!=NULL)
 99         {
100             count+=findWord(index->next[i]);
101         }
102     }
103     return count;
104 }
105 void trieTree::destory(trieTree* index)
106 {
107     for (int i=0;i<26;i++)
108     {
109         if (index->next[i]!=NULL)
110         {
111             destory(index->next[i]);
112             index->next[i]=NULL;
113         }
114     }
115     delete index;
116 }

通过编译之后,发现提交上去还是错了,Wrong Answer!

原文地址:https://www.cnblogs.com/howardhuo/p/4683349.html