2016-04-08 23 views
0

Ich versuche, eine tiefe Kopiermethode in einer BinarySearchTree-Klasse zu schreiben, aber ich habe Schwierigkeiten, die Logik hier zu verstehen. Könnten Sie mir bitte erklären, wie ich das durchmachen könnte?Java: Deep Copy im binären Suchbaum Klasse

Das ist mein main():

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

} 

Und das sind meine Kopie() -Methoden (beachten Sie, dass diese in der BinarySearchTree Klasse):

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

Bitte helfen Sie mir zu verstehen, die Logik und machen den Code richtig funktionieren.

Danke!

+0

Sie neuen Knoten zu schaffen werden sollen, wenn Sie [eine tiefe Kopie eines binären Baumes Antwort Nummer III tut] eine tiefe Kopie – jack3694078

+0

wollen (http://stackoverflow.com/questions/35820854/ai-how-to -Modell-genetische Programmierung-für-Schlachtschiffe) –

Antwort

0

Ich erkannte meinen Fehler. Ich sollte bst2 als einen BinarySearchTree anstelle eines Knotens verwenden. Dies wäre die Methode, nachdem es richtig gemacht wurde.

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