template< class NODETYPE > void Tree< NODETYPE >::insertNode( const NODETYPE &value ) { insertNodeHelper( rootPtr, value ); } // This function receives a reference to a pointer so the // pointer itself (not a copy of it!) can be modified. template< class NODETYPE > void Tree< NODETYPE >::insertNodeHelper( TreeNode< NODETYPE >*& ptr, const NODETYPE &value ) { if ( ptr == 0 ) { // tree is empty ptr = new TreeNode< NODETYPE >( value ); assert( ptr != 0 ); } else // tree is not empty if ( value < ptr->data ) insertNodeHelper( ptr->leftPtr, value ); else if ( value > ptr->data ) insertNodeHelper( ptr->rightPtr, value ); else cout << value << " dup" << endl; }