Trie(前缀树/字典树)及其应用
字典树节点的定义和字符串的构造。
代码如下:
struct Node{
Node* nxt[26];//这里可以初始化为更多的子节点
int flag;//标记该到节点是不是一个单词
Node(){ //构造函数,初始化每个子节点为NULL,且该节点不表示一个单词,即flag=0
for(int i=0;i<26;i++) nxt[i]=NULL;
flag=0;
}
};
Node* root;//
void init(){
root=new Node();//为该空指针分配一块内存
}
void insert(char *s)
{
int size=strlen(s);
Node* now=root;
for(int i=0;i<size;i++)
{
int to=s[i]-‘a’;
if(now->nxt[to]==NULL) now->nxt[to]=new Node();
now=now->nxt[to];
}
now->flag=1;//插入一个单词完成,标记结束的那个节点的flag为一
}
代码来自b站一acm大佬的讲解视频(橙子讲算法)
其实知道了insert操作以后,search和stratwith操作就是非常简单的,异曲同工而已。
https://leetcode-cn.com/problems/implement-trie-prefix-tree/description/