2016-04-08 1 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

Я осознал свою ошибку. Я должен был использовать bst2 как BinarySearchTree вместо узла. Это был бы метод, сделав его правильным.

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