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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

2回答

1210閲覧

2分探索木の問題を教えてほしい。

ryou10220417

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

2クリップ

投稿2018/07/03 07:28

C言語の問題を教えてください。答えがなく困っているのでコメントも付けていただけると助かります。
実行結果1のようになるようにしたいのですが実行結果2のようになってしまいます。
<問題>
実行結果例1になるように、下のプログラム中のprinttreeとmax_vを完成させなさい。

<実行結果1>
INSERT: 32 16 38 7 25 59 42 95 4 18 81
4
7
16
18
25
32
38
42
59
81
95

insert 23
4
7
16
18
23
25
32
38
42
59
81
95

The element 23 is found at 0x17d2170.
max_v is 95.

<実行結果2>
INSERT: 32 16 38 7 25 59 42 95 4 18 81
insert 23
The element 23 is found at 0x209d170.

<実行結果2のプログラム>
#include <stdio.h>
#include <stdlib.h>

typedef struct node{
int data;
struct node *leftson;
struct node *rightson;
} Node;

Node *search (int x);
void new (Node **w);
void insert (int x);
void delete (int x);
void nfree (Node *n);

void printtree(Node *n, int h);
int max_v(Node *n);

Node *v, *root;

Node *search(int x){
v = root;

while(v != NULL){
if (v->data == x) {
return(v);
}
if (v->data > x) {
v = v->leftson;
}
else {
v = v->rightson;
}
}

printf ("The element is not in S.\n");
return (NULL); }

void new (Node **w) {

*w = (Node *)malloc(sizeof(Node));
(*w)->leftson = NULL;
(*w)->rightson = NULL;
}

void insert(int x){
Node *p = NULL;
Node *w;

v = root;

while(v != NULL) {
p = v;
if (v->data > x){
v = v->leftson;
} else {
v = v->rightson;
}
}

new(&w);
w->data = x;

if (p->data > x){
p->leftson = w;
}
else {
p->rightson = w;
}
}

void nfree(Node *n){
if(n->leftson != NULL) {
nfree(n->leftson);
}
if(n->rightson != NULL){
nfree(n->rightson);
}
free(n);
}

int main(void){
int i;
new(&root);
root->data = S[0];

printf("INSERT:%3d", S[0]);
for (i=1; i<11; i++){
insert(S[i]);
printf("%3d", S[i]);
}
printf("\n");

insert(23); printf("insert 23\n");
printf("The element 23 is found at %p.\n",search(23));

nfree(root);
return 0;
}

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

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

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

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

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

x_x

2018/07/03 09:13

「C#」タグが付いていますが、C#ではなくC言語ということなので、「C」タグに修正してください
guest

回答2

0

Windowsを使ってるなら、VisualStudioを入れてデバッグすればどうでしょう
ソースコードの任意の行で止めて変数の内容を見たり、そこから1行づつ実行したりできます。
コードを睨むだけではまともなデバッグはできませんぜ

投稿2018/07/03 08:34

y_waiwai

総合スコア87749

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

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

0

コメントに書きづらいので、こちらに、

まず、何が問題なのでしょうか?

INSERT: 32 16 38 7 25 59 42 95 4 18 81

4
7
16
18
....

"4" 以下の行が出力されないという事でしたら、出力するコードが無いので、当然、出力されません。

The element 23 is found at 0x17d2170.

最後の "0x17d2170" が違うと言う事でしたら、これはアドレスなので、実行環境に依存します。

投稿2018/07/03 14:30

pepperleaf

総合スコア6383

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問