バイナリツリーのプログラムを作って、ノードをツリー上に表示させたいのですが,規則を見つけ出すことができません.
ツリーに登録するプログラムは完成しているので後は表示だけです.
以下に、ソースコードと現在のソースでの実行画面,実現したい実行画面を示します.
c
1#include <stdio.h> 2#include<stdlib.h> 3#include<string.h> 4#define N 30 5 6typedef struct node { 7 struct node *left, *right; 8 char label[N]; 9}TREE; 10TREE *root = NULL;//ポインタ初期化 11 12TREE *NewNode(char *str) { 13 TREE *bp; 14 bp = (TREE *)malloc(sizeof(TREE)); 15 bp->left = NULL; 16 bp->right = NULL; 17 strcpy(bp->label, str); 18 return bp; 19} 20TREE *construct_tree(TREE*node, char *str) { 21 int len1 = 0, len2 = 0;//文字列の長さ 22 if (node == NULL) { 23 node = NewNode(str); 24 } 25 else { 26 len1 = strlen(node->label); 27 len2 = strlen(str); 28 if (len2 < len1) { 29 node->left = construct_tree(node->left, str); 30 } 31 else { 32 node->right = construct_tree(node->right, str); 33 } 34 } 35 return node; 36} 37/* 部分木の全ての値を出力 */ 38TREE*print_tree(TREE *node) { 39 if (node == NULL) { 40 return NULL; 41 } 42 print_tree(node->right); 43 printf("%s\n", node->label); 44 print_tree(node->left); 45 return node; 46} 47int main() { 48 FILE*fp; 49 char str[N]; 50 if ((fp = fopen("food.txt", "r")) == NULL) { 51 fprintf(stderr, "%s\n", "error: can't read file."); 52 return EXIT_FAILURE; 53 } 54 fscanf(fp, "%s", str); 55 root = NewNode(str); 56 while (fscanf(fp, "%s", str) != EOF) { 57 construct_tree(root, str); 58 } 59 print_tree(root); 60 return 0; 61}
現在の実行画面
c
1yellowtail 2hamburger 3eggplant 4cabbage 5tomato 6chips 7pork 8tea
実現したい実行画面
c
1 yellowtail 2 hamburger 3 eggplant 4 cabbage 5tomato 6 chips 7 pork 8 tea
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。