1: /** Copies the subtree rooted at this node. 2: @return The root of a copy of the subtree rooted at this node. */ 3: public BinaryNode<T> copy() 4: { 5: BinaryNode<T> newRoot = new BinaryNode<>(data); 6: 7: if (leftChild != null) 8: newRoot.setLeftChild(leftChild.copy()); 9: 10: if (rightChild != null) 11: newRoot.setRightChild(rightChild.copy()); 12: 13: return newRoot; 14: } // end copy 15: private void privateSetTree(T rootData, BinaryTree<T> leftTree, BinaryTree<T> rightTree) 16: { 17: root = new BinaryNode<>(rootData); 18: if ((leftTree != null) && !leftTree.isEmpty()) 19: root.setLeftChild(leftTree.root.copy()); 20: if ((rightTree != null) && !rightTree.isEmpty()) 21: root.setRightChild(rightTree.root.copy()); 22: } // end privateSetTree 23: 24: // Version 4.0