二叉树实现词频统计(不使用指针)

本题知识点:
1.二叉树插入,这个不使用指针的方法是zzt大佬教我的,很强。
2.qsort以结构体内字符串为关键字进行字典序排序。
3.提醒,前面字符串处理可以不用看。

先上题目
编写程序统计一个英文文本文件中每个单词的出现次数(词频统计),并将统计结果按单词字典序输出到屏幕上。
要求:程序应用二叉排序树(BST)来存储和统计读入的单词。
注:在此单词为仅由字母组成的字符序列。包含大写字母的单词应将大写字母转换为小写字母后统计。在生成二叉排序树不做平衡处理。
【输入形式】
打开当前目录下文件article.txt,从中读取英文单词进行词频统计。
【输出形式】
程序应首先输出二叉排序树中根节点、根节点的右节点及根节点的右节点的右节点上的单词(即root、root->right、root->right->right节点上的单词),单词中间有一个空格分隔,最后一个单词后没有空格,直接为回车(若单词个数不足三个,则按实际数目输出)。
程序将单词统计结果按单词字典序输出到屏幕上,每行输出一个单词及其出现次数,单词和其出现次数间由一个空格分隔,出现次数后无空格,直接为回车。
【样例输入】
当前目录下文件article.txt内容如下:
"Do not take to heart every thing you hear."
"Do not spend all that you have."
"Do not sleep as long as you want;"
【样例输出】
do not take
all 1
as 2
do 3
every 1
have 1
hear 1
heart 1
long 1
not 3
sleep 1
spend 1
take 1
that 1
thing 1
to 1
want 1
you 3
【样例说明】
程序首先在屏幕上输出程序中二叉排序树上根节点、根节点的右子节点及根节点的右子节点的右子节点上的单词,分别为do not take,然后按单词字典序依次输出单词及其出现次数。
【评分标准】
通过全部测试点得满分

通过代码
总结
本题是第五次作业第二题,算是基础题,但也有很多槽点。
第一:我qsort以结构体内的二维数组为关键字进行排序太不熟练。首先第二个参数随便写了个500,实际上qsort不会遇到\0就终止排序,导致最后超出范围,把0全排前面去了。其次就是cmp函数不会写,导致花了很多时间查资料。

第二:低级错误,没有审题,tolower函数没写,没调用<ctype.h>库函数,输出格式没有想好,导致出现格式错误,sum少一(本来应该是顶top的),c=getchar!=EOF没写括号,freopen函数使用不熟练。
第三:没有全局意识,上来就写,导致后期再改
要好好审题啊(>' ^ ')>