自学内容网 自学内容网

字典树(Tire树)

字典树(Tire树)

字典树是一种多叉树,又称为前缀树。核心思想是利用字符串的公共前缀。

字典树的根节点为空,从根节点到某一节点路径上的字符连接起来构成字符串,完整的字符串在链上而非结点上,一个节点的所有子节点都具有相同公共前缀。

img

普通Tire树

struct node{
    bool end;//标记一个单词的结束
    int child[26];//下标存储英文数据,数组本身存储该数据的孩子结点的位置
}tree[MAX];
int cnt=1;//下一个新字符的存储位置(类似于链式前向星),注意root结点不用,故cnt从1开始
  • 插入函数:
void insert(string s){
    int now=0;//当前工作指针
    for(int i=0;i<s.size();i++){
        int c=s[i]-'a';//将字符转换成0-26
        if(!tree[now].child[c]){//若字典树中未出现此前缀字符,执行插入结点操作
            tree[now].child[c]=cnt++;//执行插入结点操作
        }
        now=tree[now].child[c];//更新当前工作指针到其孩子结点
        if(i==s.size()-1) tree[now].end=1;//一个单词完整插入,在其最后一个字符处标记结束
    }
}
  • 查找函数:
bool check(string s){
    int now=0;//当前工作指针
    for(int i=0;i<s.size();i++){
        int c=s[i]-'a';
        if(!tree[now].child[c]) return 0;//未找到该字符,此字符串查找失败
        now=tree[now].child[c];
    }
    if(!tree[now].end) return 0;//未找到结尾标记,此字符串为某个字符串的前缀,但未出现该字符串,查找失败
    return 1;//查找成功
}

01Tire树

将数字的二进制表示插入到Tire树中。


原文地址:https://blog.csdn.net/Yerosius1/article/details/140303639

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!