码迷,mamicode.com
首页 > 其他好文 > 详细

trie tree(字典树)

时间:2015-07-29 00:37:34      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

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!

trie tree(字典树)

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!