• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:再帰処理について)

再帰処理について

このQ&Aのポイント
  • 再帰処理を用いた二分木の生成とトラバーサル
  • 全ての節の子を交換する再帰的な処理方法
  • 指定した整数値の存在判定を行う関数の作成

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

「再帰だ」ってるのに、あほうですね、私。枝の処理を忘れてました。 それを直せたのだから、検索も簡単でしょう。 TraverseTree() が全てのノードを処理しているのに対し、検索はひとつでも 見つかれば、1を返せばよいのですから。 (1) 自分がその値であるか? そうなら、1を返しておしまい (2) 無ければ、左にあるか? あれば、1を返しておしまい (3) 無ければ、右にあるか? あれば、1を返しておしまい (4) どこにもないので、0を返す 蛇足かもしれませんが、 >     } else if (ExistTest(ptr->left, searchdata)) { と書いたのは } else if (ExistTest(ptr->left, searchdata) != 0) { と全く同じことです。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

TraverseTree() をじっと見れば、さほど難しくないと思うのだけどなあ。 > 全ての節の子を(左の子と右の子)を交換する。 void ReverseTree(struct BTREE *ptr) {   if (ptr == NULL) {     return;   } else {     struct BTREE* tmp;     tmp = ptr->left;     ptr->left = ptr->right;     ptr->right = tmp;   } } > 2分木の生成後に入力した整数値がリスト中にあるかどうかを int ExistTest(struct BTREE *ptr, int searchdata) {   if (ptr == NULL) {     return 0;   } else {     if (ptr->data == searchdata) {       return 1;     } else if (ExistTest(ptr->left, searchdata)) {       return 1;     } else if (ExistTest(ptr->right, searchdata)) {       return 1;     } else {       return 0;     }   } } # コンパイルや動作確認をしたわけではないので、自信無しです

naguma
質問者

お礼

入れ替えはワークを使用して入れ替えるのですが、 全ての節を行うには、という点がわかりません。

naguma
質問者

補足

void ReverseTree (struct BTREE *ptr) { struct BTREE *workp; if(ptr == NULL){ return; }else{ workp = ptr->left; ptr->left = ptr->right; ptr->right = workp; ReverseTree (ptr->left); ReverseTree (ptr->right); } } 入れ替えとトラバーサルを行えばできました。 ありがとうございます。 検索は、奮闘中です.

関連するQ&A