ツリーに登録するプログラムは完成しているので後は表示だけです.
以下に、ソースコードと現在のソースでの実行画面,実現したい実行画面を示します.
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 30
typedef struct node {
struct node *left, *right;
char label[N];
}TREE;
TREE *root = NULL;//ポインタ初期化
TREE *NewNode(char *str) {
TREE *bp;
bp = (TREE *)malloc(sizeof(TREE));
bp->left = NULL;
bp->right = NULL;
strcpy(bp->label, str);
return bp;
}
TREE *construct_tree(TREE*node, char *str) {
int len1 = 0, len2 = 0;//文字列の長さ
if (node == NULL) {
node = NewNode(str);
}
else {
len1 = strlen(node->label);
len2 = strlen(str);
if (len2 < len1) {
node->left = construct_tree(node->left, str);
}
else {
node->right = construct_tree(node->right, str);
}
}
return node;
}
/* 部分木の全ての値を出力 */
TREE*print_tree(TREE *node) {
if (node == NULL) {
return NULL;
}
print_tree(node->right);
printf("%s\n", node->label);
print_tree(node->left);
return node;
}
int main() {
FILE*fp;
char str[N];
if ((fp = fopen("food.txt", "r")) == NULL) {
fprintf(stderr, "%s\n", "error: can't read file.");
return EXIT_FAILURE;
}
fscanf(fp, "%s", str);
root = NewNode(str);
while (fscanf(fp, "%s", str) != EOF) {
construct_tree(root, str);
}
print_tree(root);
return 0;
}