Babelfish trie树的基础

本文介绍了一种使用C++实现的Trie树单词查找算法,详细解释了如何构建Trie树并进行单词的插入和查找操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
const int maxn=100005,KIND=26;
int m;//m为建trie树所输入的单词次序
char s[30];
char s1[maxn][15];
char s2[15];
char str[15];
struct node
{
    char *s;
    int prefix;//表示插入单词的先后次序,即这个单词是第几次插入的.
    bool isword;
    node *next[KIND];//可能的最大节点数,该数组用来存26个字母
    node()
    {
        s=NULL;
        prefix=-1;
        isword=false;
        memset(next,0,sizeof(next));
    }
}*root;//根
void insert(node *root,char *s)
{
    node *p=root;
    for(int i=0;s[i];i++)
    {
        int x=s[i]-'a';
        p->s=s+i;
        if(p->next[x]==NULL)
        p->next[x]=new node;
        p=p->next[x];
    }
    p->prefix=m++;
    p->isword=true;
}
int search(char *s,node *root)
{
    node *p=root;
    for(int i=0;s[i];i++)
    {
        int x=s[i]-'a';
        p->s=s+i;
        if(p->next[x]==NULL)//按单词的节点逐个查询,如果都存在且查询到根节点,跳出循环,返回true,即p->isword
        return -1;
        p=p->next[x];
    }
    //return p->isword;
    if(p->isword)//如果搜索的单词存在,则返回前缀.
      return p->prefix;
    return -1;
}
int main()
{
    m=0;
    root=new node;
    while(1)
    {
        gets(s);
        if(strcmp(s,"")==0) break;
        sscanf(s,"%s%s",s1[m],s2);
        s1[m][strlen(s1[m])]='\0';
        s2[strlen(s2)]='\0';
        insert(root,s2);
    }
    while(gets(str))
    {
        int num=search(str,root);
        if(num==-1) printf("eh\n");
        else puts(s1[num]);
    }
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值