二叉排序树,第一次做的时候状态不好,就放弃了,现在一看,怎么这么简单?

 1 #include <stdio.h>
 2 #include <string.h>
 3 struct Node
 4 {
 5     char name[40];
 6     int d,lc,rc;
 7     void init(char *t)
 8     {
 9         strcpy(name,t);
10         lc = rc = 0;
11         d = 1;
12     }
13 }a[10050];
14 int cnt = 1,num=0;
15 void inst(char *s, int n)
16 {
17     Node &u = a[n];
18     int f = strcmp(s,u.name);
19     if(!f) u.d++;
20     else if(f < 0)
21         if(u.lc) inst(s,u.lc);
22         else u.lc = ++num,a[num].init(s);
23     else
24         if(u.rc) inst(s,u.rc);
25         else u.rc = ++num,a[num].init(s);
26 }
27 void show(int n)
28 {
29     Node &u = a[n];
30     if(u.lc) show(u.lc);
31     double t = double(u.d)/ cnt*100;
32     printf("%s %.4lf\n",u.name,t);
33     if(u.rc) show(u.rc);
34 }
35 int main()
36 {
37     char t[40];
38     gets(t);
39     a[0].init(t);
40     while(gets(t)!=NULL)
41         cnt++,inst(t,0);
42     show(0);
43     return 0;
44 }