/**
*
* @File : CTree.h
*
* @Authors : D. Mathieu
*
* @Date : 25/04/2001
*
* @Version :
*
* @Synopsis : Arbre de recherche générique
*
**/
#if !defined __CTREE_H__
#define      __CTREE_H__

#include "CNode2Gen.h"

#include <vector>

namespace nsSdD
{
    template <class T>
    class CTree
    {
        typedef CNode2Gen <T> CNoeudT;

        Question 1 suite
        typedef vector    <T> CVectT;

        CNoeudT * m_Racine;

      public :
        CTree  (void);
        ~CTree (void);
       
        void Ajouter (const T & Elem);
        void Editer  (void) const;

        Question 1 - suite
        CTree & operator << (const std::vector <T> & Vect);
             --- ajouté pour la question 2

        Question 3

        CTree & operator += (const T & Elem);
             --- ajouté pour la question 4

        Question 5

      public :
        CTree & operator = (const CTree & Tree);

      private :
        void Transferer (CNoeudT * const Ptr);

        Question 6

      public :
        CTree & Cloner     (const CTree & Tree);

      private :
        CNoeudT * Cloner (CNoeudT * const Ptr);

      private :
        void      DetruireNoeud (CNoeudT * const Ptr);
        void      EditerNoeud   (CNoeudT * const Ptr) const;
        CNoeudT * Ajouter       (CNoeudT * const Ptr, const T & Elem);

    }; // CTree
   
} // nsSdD

#include "CTree.hxx"
   
#endif           __CTREE_H__