2014-07-11 50 views
-4

我不明白爲什麼這種方法複製二叉樹,它的工作原理,但它看起來很奇怪,因爲它不使用任何方法來插入節點,謝謝。二叉樹的遞歸副本

public BinaryTree<E> copy(BinaryTree<E> T, Position<E> v) 
    { 
     BinaryTree<E> S = new LinkedBinaryTree<E>(); 
     if (T.hasRight(v)) 
      copy(T, T.right(v));   // recurse on left child 
     if (T.hasLeft(v)) 
      copy(T, T.left(v)); // recurse on right child 
     return S; 
    } 

    public static void main(String[] args) { 
     LinkedBinaryTree<String> T = new LinkedBinaryTree<String>(); 
     Position<String> r = T.addRoot("r"); 
     Position<String> a = T.insertLeft(r, "a"); 
     Position<String> b = T.insertRight(r, "b"); 
     Position<String> c = T.insertLeft(a, "c"); 
     Position<String> e = T.insertRight(b,"e"); 
     Position<String> f = T.insertLeft(b,"f"); 
     Position<String> g = T.insertRight(a,"g"); 
     Position<String> h = T.insertLeft(g,"h"); 
     Position<String> i = T.insertRight(g,"i"); 

       BinaryTree<String> A = T.copy(T, r); 
     A.treeprint(A, r); 
     System.out.println("..................."); 
     System.out.println("isempty: "+A.isEmpty()); //true 
     System.out.println(A.left(r).element()); //a 
     System.out.println(A.right(r).element()); //b 
} 
+0

該方法沒有,也無法工作。 –

+0

它的作品,這很奇怪。 – kabal

+2

該方法創建並返回一個空的LinkedBinaryTree,它從不使用S.請提供一個小測試來顯示它「正在工作」。 –

回答

1

該方法不起作用。

你的測試構造一棵樹'T',使用你的複製方法(它創建一個空樹'A')。

然後顯示A爲空:正確,它沒有節點。

之所以A.left(R).element()是因爲你逝去的左()樹T的根

我相信是有沒有在你的代碼,檢查是否[R當你打電話給A.left(r)時,它在A中。