【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.19762

二分木の作成法
投稿者---plute(2005/02/06 20:14:18)


構造体で二分木を作成したいのですが、リストと違い左と右に子があるのでforなどの文だけでは作れそうになかったので、再帰呼び出しを使用して二分木を作成するにはどうしたらよいでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:二分木の作成法 19766 南野骨茶 2005/02/06 22:21:16


No.19766

Re:二分木の作成法
投稿者---南野骨茶(2005/02/06 22:21:16)


>再帰呼び出しを使用して二分木を作成するにはどうしたらよいでしょうか?

「二分木にデータを挿入する」関数の中で、
 ・二分木に挿入したいデータが現在着目しているノードのデータより小さければ、左側の「二分木にデータを挿入する」
 ・二分木に挿入したいデータが現在着目しているノードのデータより大きければ、右側の「二分木にデータを挿入する」

「」で囲ったところが再帰的になっています。
引数、戻り値、再帰を停止させる条件をどのように考えればよいでしょうか。


この投稿にコメントする

削除パスワード

No.19768

Re:二分木の作成法
投稿者---plute(2005/02/07 00:08:59)


>引数、戻り値、再帰を停止させる条件をどのように考えればよいでしょうか。
すいません、再帰呼び出しはかなり苦手でして・・・私的には"end"と入力するまでに二分木を作成、後にコマンドで"a"→Add(二分木に追加)、"d"→Delete(削除)、"p"→Print(アルファベット順に表示)のようなプログラムにしてみたいのですが。ですから再帰を停止させる条件などは"end"、引数は二分木の先頭のポインタ、戻り値は新しく作られた二分木の先頭ポインタでよろしいのでしょうか?


この投稿にコメントする

削除パスワード

No.19771

Re:二分木の作成法
投稿者---南野骨茶(2005/02/07 09:10:36)


>"end"と入力するまでに二分木を作成、後にコマンドで"a"→Add(二分木に追加)、
>"d"→Delete(削除)、"p"→Print(アルファベット順に表示)のような
>プログラムにしてみたいのですが。

プログラムの仕様はわかりました。

>ですから再帰を停止させる条件などは"end"、引数は二分木の先頭のポインタ、
>戻り値は新しく作られた二分木の先頭ポインタでよろしいのでしょうか?

"end"を入力したときに終了するのは再帰ではなくて
プログラム全体ではないかと思います。

二分木にデータを挿入する関数の中で、現在着目しているノードのデータと
挿入したいデータとを比べて、左二分木へ行くか右二分木へ行くかを
判定することになるはずです。
このとき、左や右へ延々と進み続けられるわけではなく、いつかは
先へ進めなくなって、そこにデータを挿入することとなります。

この、「いつかは先へ進めなくなって」というのが、データ挿入関数において
再帰を停止させる条件となるはずです。

例えば、4、2、1、3、6、5の順にデータを挿入していくとすると、
最終的にどんな二分木ができるでしょうか。
図化して考えてみると、ヒントが得られるかもしれません。
最初は空っぽだから根っこに4が来て、2は4より小さいから
4の左二分木に来て、…。


この投稿にコメントする

削除パスワード

No.19774

Re:二分木の作成法
投稿者---plute(2005/02/07 12:36:56)


>"end"を入力したときに終了するのは再帰ではなくて
>プログラム全体ではないかと思います。
すいません、不足した部分がありました・・・コマンドで"q"でQuitという風にしたいので、
while(strcmp(入力した文字列,"end") != 0)みたいな感じになるかと思うのですが。

>この、「いつかは先へ進めなくなって」というのが、データ挿入関数において
>再帰を停止させる条件となるはずです。
>
最初に根の部分にNULLをいれて、値をいれるとその左右にNULLを挿入しているので、きっとstrcmpで比較して大きかったら右などと進んでいき、NULLに到着したらとまりそうなのはわかるのですが、
再帰呼び出しのreturn()の括弧の中をどうしたらいいのかいまいちわからないのです。


この投稿にコメントする

削除パスワード

No.19782

Re:二分木の作成法
投稿者---plute(2005/02/07 23:42:56)


南野骨茶さん、度々丁寧な返信を下さいましてありがとうございました。図などを書いて試行錯誤をもっと繰り返してみます。


この投稿にコメントする

削除パスワード

No.19820

Re:二分木の作成法
投稿者---ootya(2005/02/10 15:25:59)


すいません、この二分木でログを読んで並びかえなどはわかったのですが、削除はどう書けばよいのか教えて下さいませんでしょうか?


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧