2016-04-08 27 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 -model遺傳編程換戰艦) –

回答

0

我意識到自己的錯誤。我應該使用bst2作爲BinarySearchTree而不是Node。這是正確後的方法。

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