template <typename T>
class BinaryTree
{
class Node
{
T value_;
Node * parent_,
* lchild_,
* rchild_;
Node (const T& t); // constructor (parameter required)
friend class BinaryTree <T>
friend class BinaryTreeNavigator <T>
} ; // class Node
protected:
Node * root_; // protected Node pointer data
public:
typedef T ValueType;
typedef BinaryTreeNavigator <T> Navigator;
typedef BinaryTreeInorderIterator <T> Iterator;
// ... other iterator types as needed
} ; // class BinaryTree