2013-07-08 3 views
0

다음은 'CopyTree'클래스의 함수입니다. TreeNode라는 내부 중첩 클래스를 숨 깁니다. 또한 TreeNode 루트는 개인 변수입니다. 내가 주석 처리 한 선에 대한 청결한 구현/대안이 있습니까? 감사.개인 변수를 사용하여 개체를 만드는 클리너 솔루션?

public class CopyTree { 
    private TreeNode root; 

    private static class TreeNode { 
     TreeNode left; 
     TreeNode right; 
     Integer element; 
     TreeNode(TreeNode left, TreeNode right, Integer element) { 
      this.left = left; 
      this.right = right; 
      this.element = element; 
    } 
} 

public CopyTree copyTree() { 
    CopyTree ct = new CopyTree(); 
    ct.root = copyTree(root); // <---- QUESTION: Any cleaner solution ?? 
    return ct; 
} 

private TreeNode copyTree(TreeNode binaryTree) { 
    TreeNode copy = null; 
    if (binaryTree != null) { 
     copy = new TreeNode(null, null, binaryTree.element); 
     copy.left = copyTree(binaryTree.left); 
     copy.right = copyTree(binaryTree.right); 
    } 
    return copy; 
} 
+1

을 사용하는 것입니다 (당신은 간단한 방법으로 재귀를 피할 수는 없지만)? –

+0

'root'는 null입니다. 당신의'copyTree (TreeNode ..)'는'null'을 리턴 할 것입니다. – nachokk

답변

0

트리로 내려가려면 재귀를 사용해야합니다.

은 주요 당신이 원하는이 생성자 그 라인 청소시기 어떤 방법으로

// inside TreeNode 
TreeNode copy() { 
    return new TreeNode(left == null ? null : left.copy(), 
         right == null ? null : right.copy(), element); 
} 

// inside CopyTree 
public CopyTree copyTree() { 
    return new CopyTree(root == null ? null : root.copy()); 
}