思い出したように二分木の話。対象はver.007。

> Node root={"\0",0, NULL, NULL};
空の単語も全部これにカウントすることになるが、それは意図的なもの?
Node *root = NULL;でnodeは要らないはず。

> while ((c=fgetc(fp))!=EOF || j<=MAXWORD){
charとEOFの比較はうまくいかないし、jがMAXWORDにいっても終らん。

> ptr[j]=(char *)malloc(sizeof(char)*i); /*単語を格納するための場所確保*/
> strcpy((char *)*ptr[j], temp); /*確保した場所に単語を格納*/
ターミネータの分を忘れてる。このptr自体不要だと思うが。
二分木に貯め込むってのに、別に配列に取っておく必要はないだろう。

以前も書いたが、英字以外が連続したときのことを考えていない。
iが何を意味しているか考えればできるはず。
whileの中の条件の順序を変えた方がいいと思う。