>>603 設問1および3。脳内コンパイラでの回答。設問2は入力ファイルによってことなる。

#include <string.h>
#include <stdlib.h>
を追加

strdup()
・ライブラリで持っている処理系もあるので、名前がかち合う可能性がある。
・int len;→size_t len; /* まあ、これはいちゃもんだけど */
(設問で除外されてるが、できれば、malloc()の戻り値をチェックしたほうがいい。)

getword()
・char c;→int c; /* 初心者はよくやる */
・*w = c;→*w++ = c; /* まあ・・・忘れることもある・・・かな? */
(設問で除外されてるが、できれば、文字数がオーバーしてないかチェックしたほうがいい。)

wordtree()
・node->c = 2;→node->c++; /* さすがにこれはやらない。ただ書き忘れすることがある */
(設問で除外されてるが、できれば、strdup()とmalloc()の戻り値をチェックしたほうがいい。)

printtree()
・穴埋めを埋める(a) printtree(node->left); (b) printtree(node-right);

main()
・char word[MAXWORD + 1]; /* まあ・・・+1の忘れってのはよくあることで */
・fclose(fp);を書いておくべき。
(設問で除外されてるが、できれば、fopen()の戻り値をチェックしたほうがいい。)

アルゴリズム自体
・ソート済みの文字列を多く読み込ませると、スタックオーバーフローするはず。