小-七 2016-10-11 10:10 采纳率: 0%
浏览 781

自己写的trie字典树,提交后显示输出错误但是我自己测试没有问题,求大神给看一下

#include<stdio.h>
#include<stdlib.h>

struct cell
{
    char letter;
    int count;
    struct cell *next[26];
};

int main()
{
    int add(char *ch,struct cell *root);
    int search(struct cell *root ,char *ch);

    int n,m,i;
    int *arr;
    struct cell *root;
    root = (struct cell *)malloc(sizeof(struct cell));
    for(i = 0;i<26 ;i++)
    {
        root->next[i] = NULL;
    }
    char ch[10];
    scanf("%d",&n);


    for( i = 0;i < n;i++)
    {
        scanf("%s",&ch);
        add(ch,root);
    }

    scanf("%d",&m);
    arr = (int *) malloc(sizeof(int) * n);
    for( i=0;i<m;i++)
    {
        scanf("%s",&ch);
        printf("%d\n",search(root,ch));
    }

    return 0;
}

int add(char *ch,struct cell *root)
{
    struct cell *p1,*p2,*header,*tmp;
    int i,j,k;
    for(i=0;i<10;i++)
    {
        if(ch[0] == '\0')
        {
            break;
        }
        for(j = 0; j<26;j++)
        {
            //tmp = (struct cell*) malloc(24*sizeof(struct cell));
            if(i == 0)
                tmp = root;
            else
                tmp = p1;


            if(NULL != tmp->next[j])
            {           
                if((tmp->next[j])->letter == ch[0])
                {
                    (tmp->next[j])->count++;
                    ch++;
                    p1 = tmp->next[j];
                    break;
                }
            }
            else
            {
                p1 = (struct cell *)malloc(sizeof(struct cell));
                p1->count = 1;
                p1->letter = ch[0];
                for(k = 0;k<26 ;k++)
                {
                    p1->next[k] = NULL;
                }
                tmp->next[j] = p1;
                ch++;
                break;
            }
        }
    }
    return 0;
}

int search(struct cell *root,char *ch)
{
    int i,j,k;
    k = 0;
    struct cell *p;
    p = root;
    for(i = 0;i<10;i++)
    {
        if(ch[0] == '\0')
        {
            return p->count;
            break;
        }

        for(j = 0;j < 26; j++)
        {

            if(NULL != p->next[j])
            {
                if(p->next[j]->letter == ch[0])
                {
                    p = p->next[j];
                    break;
                }
            }
            else
            {
                return 0;   
                break;  
            }
        }
        ch++;
    }
}


  • 写回答

1条回答 默认 最新

  • devmiao 2016-10-11 11:43
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器