An iterator is just an object that represents a particular item in a container (your binary search tree). When you increment the iterator (with ++) you move the iterator to represent the next item in the container. So your iterator must know how to traverse to the next element in the container.
Your container must be able to provide two iterators.
begin() // returns an iterator to the first element.
end() // returns an iterator to the one past the last element.
// when an iterator is incremented passed the end of the container
// it should compare equal to the iterator returned by this call.
The operations you need to define for one of the simplest iterator (Forward Iterator) are:
Node<Key, Value>& operator*() // Return a reference to the node
// That the current iterator represents.
iterator& operator++() // Advance the iterator to the next element.
// Return a reference to yourself.
iterator operator++(int) // Advance the iterator. But return the
// original value.
bool operator!=(iterator const & rhs) // Check if two iterators represent
// the same node (or end). return true
// if they do not (its not equal).