前缀树(字典树)Trie的c代码

#define idxsize 26

#define max 10000

struct Trie

{

//ch[i][j]保存结点i的那个编号为j的子节点,若i的子节点j存在则为1,不存在则为0,其中根节点为节点0

//编号的意思是子节点的字符对应的字典序编号,如只有小写字母的情况下,a对应0,b对应1,以此类推

//max为能够插入的结点总数上限,则zs <= max

int ch[max][idxszie];

int zs;
//结点总数

Trie(){ zs = 1; memset(ch[0], 0, sizeof(ch[0])); }

int idx(char c){ return c – ‘a’; }
//字符c的编号

//Trie的插入,插入字符串s

void insert(char *s)

{

int u = 0, n = strlen(s);

for(int i = 0; i < n; i++)

{

int c = idx(s[i]);

if(!ch[u][c])
//待插入的节点不存在

{

memset(ch[zs], 0, sizeof(ch[sz]));

ch[u][c] = zs++;
//节点数增加

}

u = ch[u][c];
//往下继续插入

}

}

};

还有一些功能没有实现,有空再说吧

    原文作者:Trie树
    原文地址: https://blog.csdn.net/qq_35985044/article/details/71076080
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞