具体的解释啥的看b站视频吧:橙子讲算法:字典树
https://www.bilibili.com/video/av17727605/?from=search&seid=8611968891522942354
模板:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define MAX 26
typedef struct TrieNode
{
int nCount;
struct TrieNode* next[MAX];
} TrieNode;
TrieNode Memory[1000005];
int allocp=0;
void InitTrieRoot(TrieNode * *pRoot)
{
*pRoot=NULL;
}
TrieNode *CreateTrieNode()
{
int i;
TrieNode *p;
p=&Memory[allocp++];
p->nCount=1;
for(i=0; i<MAX; i++)
{
p->next[i]=NULL:
}
return p;
}
void InsertTrie(TrieNode * *pRoot,char *s)
{
int i,k;
TrieNode *p;
if(!(p=*pRoot))
{
p=*pRoot=CreateTrieNode();
}
i=0;
while(s[i])
{
k=s[i++]-'a';
if(!p->next[k])
p->next[k]=CreateTrieNode();
else p->next[k]->nCount++;
p=p->next[k];
}
}
int SerachTrie(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;
}