2016-04-08 13 views
0

ディープコピーメソッドをBinarySearchTreeクラスに入力しようとしていますが、ここでロジックを理解するのが難しいです。私はこのことをどのように進めることができるのか、私に説明してください。Java:バイナリ検索ツリークラスのディープコピー

これは私のメイン():

public static void main(String[] args) { 
     BinarySearchTree<String> bst1 = new BinarySearchTree<String>(); 
     BinarySearchTree<String> bst2 = new BinarySearchTree<String>(); 

     String[] words = {"hello", "world", "how", "are", "you", "doing"}; 

     for (int i = 0; i < words.length; i++) { 
      bst1.add(words[i]); 
     } 

     bst1.copy(bst2); 

} 

、これらは私のコピー()メソッド(これらはBinarySearchTreeクラスであることに注意してください)、次のとおりです。

public void copy(BinarySearchTree<E> bst2){ 
    copy(this.root, bst2.root); 
} 

private void copy(Node<E> bst1, Node<E> bst2){  
    bst2.data = bst1.data; 

    if(bst1.left != null){ 
     bst2.left = bst1.left; 
     copy(bst1.left, bst2.left); 
    } 
    if(bst1.right != null){ 
     bst2.right = bst1.right; 
     copy(bst1.right, bst2.right); 
    } 
} 

は私が理解して助けてくださいロジックとコードを正しく動作させる。

ありがとうございます!

+0

ディープコピー – jack3694078

+0

[回答数IIIんバイナリーツリーのディープコピー](http://stackoverflow.com/questions/35820854/ai-how-to - モデル - 遺伝的プログラミング - 戦艦) –

答えて

0

私は間違いを認識しました。私はノードの代わりにBinarySearchTreeとしてbst2を使用することになっていました。これは正しいものにした後の方法でしょう。

public void copy(BinarySearchTree<E> bst2){ 
    copy(bst1.root, this); 
} 

private void copy(Node<E> bst1, BinarySearchTree<E> bst2) { 
    if (bst1 == null) { 
     return; 
    } else if (bst1.left == null && bst1.right == null) { 
     bst2.add(bst1.data); 
    } else { 
     bst2.add(bst1.data); 

     if (bst1.left != null) { 
      copy(bst1.left, bst2); 
     } 

     if (bst1.right != null) { 
      copy(bst1.right, bst2); 
     } 
    } 
} 
したい場合は、新しいノードを作成する必要があります