2014-07-11 6 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가 비어 있음을 보여줍니다. 올바른 노드에는 노드가 없습니다.

당신이) (

내가 R 여부를 확인 코드에서 아무것도 생각 트리 T.의 루트를 왼쪽으로 전달하는 때문에 A.left (R) .element()가이 표시되는지 그 이유는 A.left (r)에게 전화 할 때 A에 있습니다.