第一次接触字典树,写了一下午终于写出来了,因为一个很小的错误,调试了半天,最后还从写了一遍,看来还要多写代码才是硬道理!
代码如下:
#include<stdio.h>
02.
#include<string.h>
03.
#include<stdlib.h>
04.
char
str[15],ans[15];
05.
int
max;
06.
struct
node
07.
{
08.
struct
node* next[26];
09.
int
count;
10.
};
11.
struct
node* root;
12.
struct
node* newnode()
//建立新的结点
13.
{
14.
struct
node* p=(
struct
node*)
malloc
(
sizeof
(
struct
node));
15.
for
(
int
i=0;i<26;i++)
16.
p->next[i]=NULL;
17.
p->count=0;
18.
return
p;
19.
}
20.
void
insert()
21.
{
22.
struct
node*p=root;
23.
int
len=
strlen
(str);
24.
for
(
int
i=0;i<len;i++)
25.
{
26.
if
(p->next[str[i]-
'a'
]==NULL)
//当一个结点为空的时候,就新建立一个节点
27.
p->next[str[i]-
'a'
]=newnode();
28.
p=p->next[str[i]-
'a'
];
29.
}
30.
p->count++;
//当一个单词输入结束的时候,就让最后结点中的count值加1
31.
if
(p->count>max)
32.
{
33.
max=p->count;
34.
strcpy
(ans,str);
35.
}
36.
}
37.
int
main()
38.
{
39.
int
icase;
40.
scanf
(
"%d"
,&icase);
41.
root=newnode();
42.
max=0;
43.
while
(icase--)
44.
{
45.
scanf
(
"%s"
,str);
46.
insert();
47.
}
48.
printf
(
"%s %d\n"
,ans,max);
49.
return
0;
50.
}