分为静态内存 和 动态内存的字典树
静态内存不需要清空 oj也不会崩
1.创建
静态内存申请
struct node
{
node *nex[10];
int flag;
};
node a[10000000];//动态内存会蹦
int top;//每次清0;
node *makeempty()//申请静态内存
{
int i;
node *root = &a[top++];
root ->flag = 0;
for(i=0; i<10; i++)
{
root->nex[i]=NULL;
}
return root;
}
上面的函数相当于 new node 把所有的new node 用函数代替
2.动态内存的结构体
struct node
{
node *nex[26];
int flag;
node()//执行函数
{
for(int i=0; i<26; i++)
{
nex[i] = NULL;
}
flag = 0;
}
};
3.字典树插入函数
void creat(char s[],node *root)
{
int len = strlen(s);
node *now = root;
for(int i=0; i<len; i++)
{
int to = s[i] - 'a';//第几个字母位置
if(now->nex[to] == NULL)//如果这个位置没有字母 就新开一个
{
now -> nex[to] = makeempty();//这里改为静态
}
now = now -> nex[to];//指针移动
}
now->flag = 1;//标记结束
}
4.搜索函数
int search1(char s[],node *root)
{
node *now = root;
int len = strlen(s);
for(int i=0; i<len; i++)
{
int to = s[i] - 'a';
if(now->nex[to]==NULL)return 0;//没有节点直接结束
now = now->nex[to];
}
return now ->flag;//扫描到最后返回flag
}
5.如果动态内存的话 需要清内存
void dele(node *tmp)
{
if(tmp==NULL)
return;
for(int i=0;i<26;++i)
if(tmp->nex[i]!=NULL)
dele(tmp->nex[i]);
delete tmp;
return;
}