人力検索はてな - 質問一覧
URLはダミーです。
なかなかコードが見つかりません (汗;
ごめんなさい。
二文探索木ですから、
1) tree1の部分木の値(真ん中の値)を、tree2に挿入
2) それより小さい値(左枝)を処理
3) それより大きい値(右枝)を処理
と、再帰処理するだけなのですが。
もうすこしアルゴリズムっぽく書くと、
(0) tree1のルートをターゲットノードとする。
(1) そのノードが値も左右の枝も持たなければ (5)へ。
(2) そのノードの持つ値をtree2に挿入する。
(3) tree1の左枝の要素を再帰的に処理する。
(左枝の要素のルートをターゲットノードにして(1)へ)
(4) tree1の右枝の要素を再帰的に処理する。
(5) 一つ上のレベルに戻る。いまのレベルがtree1のルートなら終了。
みたいな。
これではお役に立ちませんか?
ちなみに、B-treeへの挿入や探索は書きURLのような感じです。
以下、おまけです。
アルゴリズムの解説です。
JAVAによるデータ構造の本です。
ようやく出来ました。
sasadaさんのアルゴリズムが役に立ちました。
下のメソッドを実行すると”ego”にtree1とまったく同じ構造の二分探索木が出来上がります。
ただ、これをtree2のオブジェクトとして返す方法が分かりませんのですが、これはまた別の問題なので今回の質問に対しては解決です。
ありがとうございました!
public IntBSTNode copy(IntBSTNode source) {
IntBSTNode leftCopy, rightCopy;
if(source != null) {
System.out.println(source.key);
leftCopy = copy(source.left);
rightCopy = copy(source.right);
IntBSTNode ego = new IntBSTNode(source.key, source.left, source.right);
System.out.println(ego.key + ” Ego!”);
}
return source;
}