2016-12-05 12 views
0

私はキーと文字列を含むエントリを持つBSTを持っています。 私はツリーを作って値を移入し、その値を別のツリーにコピーしたいと思っています。私が持っている唯一の機能は、共通バイナリ検索ツリー関数とイテレータBegin()とEnd()です。バイナリ検索ツリー - 別のツリーに1つのツリーをコピーする

ダイレクトコピー機能を使用せずにこれを行うにはどうすればよいですか?コピー(T1、T2)?

私は理論的に、実際のコードの実装方法を探しています。

+0

あなたは、T2は、すでに値が含まれている既存のツリーT2に一の木のT1から値をコピーしたいですか?または、T1の既存の値を使って新しいツリーT2を作成するツリーコピー機能が必要なのでしょうか? – Jan

+0

あなたは、「別のツリーにその値をコピー」「一般的なバイナリ検索ツリー機能」によって何を意味するかを説明する必要がある、と「ダイレクトコピー機能」---これらの概念のすべてが曖昧です。 – rolevax

答えて

1

あなたが持っている唯一の機能は、イテレータと終了イテレータを開始し、検索、挿入、削除されている場合は、あなたの唯一のオプションは、個別の宛先ツリーに各値を挿入し、最初のツリーを反復することであろうように、それが聞こえます。しかし、これらのイテレータが要素を順番に返すと、ツリーが自己平衡化されない場合、コピーすると結果のツリーはスティックになります。 (つまり、完全にアンバランスになります)。イテレータがpre-orderまたはbreadth firstという値を返す場合、これは問題ではありません。

など。以下のツリーを考える:イテレータはシーケンス1, 2, 3 ... 7を返された場合

 4 
    /\ 
/ \ 
    2  6 
/\ /\ 
1 3 5 7 

、空の木にその順序でそれらを挿入すると、以下を生成します:

1 
\ 
    2 
    \ 
    3 
    \ 
     4 
     \ 
     5 
     \ 
      6 
      \ 
      7 

プリオーダーのイテレータは4, 2, 1, 3, 6, 5, 7を返しますが、呼吸優先イテレータは4, 2, 6, 1, 3, 5, 7を返し、これらの挿入命令のいずれかが元のツリーを再現します。

関連する問題