2016-04-08 27 views
0

BinarySearchTree sınıfında bir derin kopyalama yöntemi yazmaya çalışıyorum, ancak burada mantığı anlamada zorluk yaşıyorum. Lütfen bununla nasıl baş edebileceğimi açıklar mısınız?Java: Binary Arama Ağacı Sınıfı'nda Derin Kopyalama

Bu benim ana():

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); 

} 

Ve bunlar benim kopya() yöntemleri (bu BinarySearchTree sınıfında olduğunu akılda tutmak) vardır:

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); 
    } 
} 

anlamama yardım edin mantık ve kodun doğru şekilde çalışmasını sağlayın.

Teşekkürler! Hatamı anladım (

)
+0

derin kopya – jack3694078

+0

[Cevap Sayısı III yapan bir ikili ağacın derin bir kopyası] (http://stackoverflow.com/questions/35820854/ai-how-to -model genetik programlama-için-savaş gemileri) –

cevap

0

Bir Düğüm yerine bst2'yi BinarySearchTree olarak kullanmam gerekiyordu. Doğru yaptıktan sonra bu yöntem olacaktır.

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); 
     } 
    } 
} 
İsterseniz yeni düğümler yaratmak olmalıdır