// Suite question 7

template <class T>
inline void CTREE_NODE::ForEach (CFunctor1Param <T> & Functor)
{
    if (GetGauche ()) GetGauche ()->ForEach (Functor);
    Functor (*this);
    if (GetDroit ())  GetDroit () ->ForEach (Functor);

} // ForEach()
 

template <class T>
inline void CTREE::ForEach (CFunctor1Param <T> & Functor) const
{
    if (m_Racine) m_Racine->ForEach (Functor);

} // ForEach()

// Suite question 8

template <class T>
inline const T & CTREE::min (void) const
{
    CNoeudT * Ptr = m_Racine;
    for ( ; Ptr->GetGauche (); Ptr = Ptr->GetGauche ());
    return *Ptr;

} // min()

template <class T>
inline const T & CTREE::max (void) const
{
    CNoeudT * Ptr = m_Racine;
    for ( ; Ptr->GetDroit (); Ptr = Ptr->GetDroit ());
    return *Ptr;

} // max()