解题代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 10000
#define MAXS 30
typedef struct tnode* pt;
struct tnode {
char data[MAXS+1];
int cnt;
pt left, right;
};
pt CreatTree(char* temp);
pt Insert(pt T, char* temp);
void Print(pt T, int N);
int main()
{
int N, i;
char temp[MAXS + 1];
pt T = NULL;
scanf("%d\n", &N);
for (i = 0; i < N ; i++) {
gets(temp);
T = Insert(T, temp);
}
Print(T, N);
return 0;
}
pt CreatTree(char* temp) {
pt T = (pt)malloc(sizeof(struct tnode));
T->cnt = 1;
T->left = T->right = NULL;
strcpy(T->data, temp);
return T;
}
pt Insert(pt T,char* temp) {
if (!T) return CreatTree(temp);
int cmp;
cmp = strcmp(temp, T->data);
if (cmp > 0) T->right = Insert(T->right, temp);
else if (cmp < 0) T->left = Insert(T->left, temp);
else T->cnt++;
return T;
}
void Print(pt T,int N) {
if (!T) return;
Print(T->left,N);
printf("%s %.4lf%%\n", T->data, (double)(T->cnt) / N * 100);
Print(T->right,N);
}
测试结果
问题整理
1.要习惯用define来参与数组容量的定义。
2.Creat的接口只放在Insert中会更舒服一点。
3.注意strcpy和strcmp的使用。
4.注意创建字符数组的容量要余出一个位置给'\0'。
5.VS2015支持的C11支持gets_s而不支持gets,PTA编译器支持gets,而不支持gets_s。