質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

2249閲覧

ツリー状に表示する方法

masuter0413

総合スコア50

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/04/27 01:12

バイナリツリーのプログラムを作って、ノードをツリー上に表示させたいのですが,規則を見つけ出すことができません.
ツリーに登録するプログラムは完成しているので後は表示だけです.
以下に、ソースコードと現在のソースでの実行画面,実現したい実行画面を示します.

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

"深さ"を引数に与えるだけじゃね?

C

1/* 部分木の全ての値を出力 */ 2TREE*print_tree_depth(TREE *node, int depth) { 3 if (node == NULL) { 4 return NULL; 5 } 6 print_tree_depth(node->right, depth+1); 7 { int i; for ( i = 0; i < depth; ++i ) printf(" "); } // depth分の空白 8 printf("%s\n", node->label); 9 print_tree_depth(node->left, depth+1); 10 return node; 11} 12 13TREE*print_tree(TREE *node) { 14 return print_tree_depth(node,0); 15}

投稿2019/04/27 01:50

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問