template<class VarT>
class CBSearchTree
{
private:
class CKnoten;
public:
CBSearchTree<VarT>(); //Standdradkonstruktor
CBSearchTree<VarT>(CBSearchTree<VarT>* oldTree); //Kopierkonstruktor
void Merge(CBSearchTree<VarT>* addTree); //Zusammenfügen von 2 Bäumen
virtual void InsertEle(VarT newEle) = 0; //fügt neues Element in Baum ein
virtual bool DeleteEle(VarT delEle) = 0; //Löscht ein Element, Rückgabe des gelöschten Elements
bool IsElement(VarT Ele); //prüf ob ein Element schon enthalten ist
VarT GetNextSmaller(VarT Ele); //Gibt das nächst kleinere Element zurück
VarT GetNextHigher(VarT Ele); //Gibt das nächst größere Element zurück
int GetCount(); //Zählt die im Baum enthaltenen Elemente
bool IsEmpty(); //prüft ob der Baum leer ist, wenn leer dann wird "true" zurückgeben
~CBSearchTree<VarT>();
class CIterator
{
friend class CBSearchTree<VarT>;
private:
CKnoten* m_pPointer;
unsigned short m_iModus;
void SetAdress(CKnoten* pPointer);
public:
CIterator(unsigned short iModus=MD_IN_ORD);
void SelModus(unsigned short iModus);
void SelNext();
void SelPrev();
void SelFirst(CBSearchTree<VarT>* pParentClass);
void SelLast(CBSearchTree<VarT>* pParentClass);
VarT GetSelEle();
bool IsValidate();
};
class CExceptionWrongModus
{
friend class CBSearchTree<VarT>;
private:
unsigned short m_iModus;
public:
CExceptionWrongModus(unsigned short iModus);
unsigned short GetModus();
};
private:
class CKnoten
{
friend class CBSearchTree<VarT>;
public:
CKnoten(VarT Value);
private:
CKnoten* m_pRight; //Adresse des rechter Kind-Knoten
CKnoten* m_pLeft; //Adresse des linker Kind-Knoten
CKnoten* m_pParent;
VarT m_Value;
};
CKnoten* m_pWurzel; //Enthält die Adresse der Wurzel des Knotens
int m_iAnzahl;
CIterator SearchR(VarT Value,CKnoten* pKonten);
CIterator SearchNextR(VarT Value,CKnoten* pKonten);
};