Stu, I am a little confused thinking about the logic of this. This is what I am suppost to do, perhaps you can help me with it.

Do a preorder traversal, copying nodes as you go. You'll need two functions because the traversals are recursive.

Copy Constructor: BST(const BST & original)
It simply passes the originals root(or all of the original) and root( as a reference parameter) to a recursive function CopyTree() that will do the traversal and node copying, passing the root of the copy back to root.

this means make a constructor
BST(//data)
{ CopyTree(//with those two parameters); } // I guess I'm not getting the root and root part. I would post all the code but its kinda large. Thanks stu