私のプログラムは、ファイルから文字を読み取り、ファイル内のコンテンツの順序順、順序順、順序順を表示することを想定しています。問題は、ファイルのコンテンツの半分しか表示されないことです。ファイルからの読み取りを停止する場所と理由がわかりませんか?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MaxWordSize 50
typedef struct {
char word[MaxWordSize + 1];
}NodeData;
typedef struct treeNode {
NodeData data;
struct treeNode *left, *right;
}TreeNode, *TreeNodePtr;
typedef struct {
TreeNodePtr root;
}BinaryTree;
void visit(TreeNodePtr node) {
printf("%s", node -> data.word);
}//end visit
void preOrder(TreeNodePtr node) {
void visit(TreeNodePtr);
if (node != NULL) {
visit(node);
preOrder(node -> left);
preOrder(node -> right);
}
}
void inOrder(TreeNodePtr node) {
void visit(TreeNodePtr);
if (node != NULL) {
inOrder(node -> left);
visit(node);
inOrder(node -> right);
}
}
void postOrder(TreeNodePtr node) {
void visit(TreeNodePtr);
if (node != NULL) {
postOrder(node -> left);
postOrder(node -> right);
visit(node);
}
}
TreeNodePtr buildTree(FILE *in) {
char str[MaxWordSize + 1];
fscanf(in, "%s", str);
if (strcmp(str, "@") == 0) {
return NULL;
}
TreeNodePtr p = (TreeNodePtr)malloc(sizeof(TreeNode));
strcpy(p -> data.word, str);
p -> left = buildTree(in);
p -> right = buildTree(in);
return p;
}
int main() {
TreeNodePtr buildTree(FILE *);
void preOrder(TreeNodePtr);
void inOrder(TreeNodePtr);
void postOrder(TreeNodePtr);
FILE *in = fopen("./c/btree.in.txt", "r");
BinaryTree bt;
bt.root = buildTree(in);
printf("\n The pre-order traversal is : ");
preOrder(bt.root);
printf("\n The in-order traversal is : ");
inOrder(bt.root);
printf("\n The post-order traversal is : ");
postOrder(bt.root);
printf("\n\n");
fclose(in);
system ("PAUSE");
return 0;
}
私の入力ファイルの内容は次のとおりです。
C E F @ @ H @ @ B @ @ G A @ @ N J @ @ K @ @
私の出力は次のとおりです。
The pre-order traversal is: CEFHB
The in-order traversal is: FEHCB
The post-order traversal is: FHEBC