Trie 树主要是Insert 和search
题目: hoj 前缀查询:
直接上对应的代码吧:
class TriNode
{
public:
TriNode();
~TriNode();
public:
int Count;
TriNode *next[26];
bool exist;
};
TriNode::TriNode()
{
Count = 0;
//memset(next, 0, sizeof(next));
exist = false;
}
void trieInsert(TriNode *root, char *word)
{
TriNode *node = root;
char *p = word;
int id;
while(*p != '\0' && p != nullptr)
{
id = (*p) - 'a';
if(node->next[id] == nullptr)
{
node->next[id] = new TriNode();
}
node = node->next[id];
++p;
(node->Count)++;
}
node->exist = true;
}
int trieSearch(TriNode *root, char *word)
{
TriNode *node = root;
char *p = word;
int id;
if(node == nullptr)
{
return 0;
}
while(*p)
{
id = *p - 'a';
node = node->next[id];
++p;
if(node == nullptr)
{
return 0;
}
}
return node->Count;
}
int main()
{
TriNode *root = new TriNode();
char str[12];
bool flag = false;
while(gets(str))
{
if(flag)
{
cout << trieSearch(root, str) << endl;
}
else
{
if(strlen(str) != 0)
{
trieInsert(root, str);
}
else
{
flag = true;
}
}
}
return 0;
}