• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:二分検索木でのコピー(昨日、回答0で、今日、また再挑戦))

二分検索木でのコピー - 昨日回答0で、今日再挑戦

このQ&Aのポイント
  • 二分検索木でtree1の内容をtree2に再帰的にコピーしたいが、表示されない問題が発生しています。
  • IntBSTクラスのcopyメソッドで苦労してtree1の内容を新しいオブジェクト「IntBSTNode ego」にコピーすることはできました。
  • 唯一の問題は、main()でbst2.print()などを行っても何も表示されないことです。方法を教えてください。

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

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

>bst2.print();などとやっても何も表示されません bst2のrootノードもちゃんとコピーした? nullのまんまでない? それはともかく。 以下のようすると、ちゃんと動くんでない? (※確証ない) public class IntBST {    /**   *「木」を複製するメソッド。   *@引数 pRoot コピー元root  */  public void copyFromRoot(IntBSTNode pRoot) {   root = copy(pRoot);  }      /**   *ノードの複製を(再帰的に)作る。   *@戻り値 複製ノード  */  public IntBSTNode copy(IntBSTNode source) {   IntBSTNode ego=null;   if(source != null) {    System.out.println(source.key);    //copy(source.left);    //copy(source.right);    //(1)source.leftの「複製」を作成    IntBSTNode l = copy(source.left);    //(2)source.rightの「複製」を作成    IntBSTNode r = copy(source.right);        //IntBSTNode ego = new IntBSTNode(    //source.key, source.left, source.right);    //新ノードegoをつくり、左右複製物を    //egoのメンバ変数にセット    //(することにより、結果的にtreeを構築)↓    ego = new IntBSTNode(source.key, l, r);    //↑(3)これで複製完成。    System.out.println(ego.key + " Ego!");   }   //return source;   return ego;//複製を返す。 //※ここでegoを返り値としないと、上記(1)(2)(3)のようなことができない。  }    public static void main(String[] args) {   //こんな感じで使う IntBST bst2 = new IntBST();   bst2.copyFromRoot(bst1のroot); } }

ginkgo
質問者

お礼

ありがとうございます。 実は質問をした二時間後に自己解決してしまいました(削除しようにも一日経たないと駄目なんですね)。 kacchannさんの書かれた方法が昨日まで欲しかったんです。特に、 >  public void copyFromRoot(IntBSTNode pRoot) { >   root = copy(pRoot); >  } と >   return ego;//複製を返す です。 > bst2のrootノードもちゃんとコピーした? > nullのまんまでない? さすが、鋭いですね。そうです、私が解決した方法というのは    ego = new IntBSTNode(source.key, l, r); を    root = new IntBSTNode(source.key, l, r); にする方法です。 bst2で呼んでいるのでrootは既にbst2のものなんですね (てっきりrootはまだbst1のものだと思っていました)。 私のごちゃごちゃしたプログラムを見て、 修正して下さってありがとうございました!

関連するQ&A