←предыдущая следующая→
... 18 19 20 21 22 23 24 25 26 27
public:
void Add(T &a);
int Delete(int k);
BTree();
~BTree(); };
template <class T> void BTree<T>::Add(T &a)
{ if(data==NULL) { data=a; return; } //вставка в текущий
if(a>data)
{ if(r==NULL) r=new BTree<T>; r->Add(a); } else //в правый
{ if(l==NULL) l=new BTree<T>; l->Add(a); } } //в левый
template <class T> int BTree<T>::Delete(int k)
{ if(k==0) { data=0; return 0; }
if(k==1&&l!=NULL) return l->Delete(0);
if(k==2&&r!=NULL) return r->Delete(0);
if(l!=NULL) {k-=l->Delete(k); if(k==0) return 0; }
if(r!=NULL) {k-=r->Delete(k); if(k==0) return 0; }
return k; }
template <class T> BTree<T>::BTree()
{ l=NULL; r=NULL; data=0; }//инициализация
template <class T> BTree<T>::~BTree()
{ data=0; //удаление данных
if(l!=NULL) delete l; // -//- левого поддерева
if(r!=NULL) delete r; } // -//- правого поддерева
void main()
{ BTree<long> a; //двоичное дерево из long-ов
a.Add(10); a.Add(3); a.Add(210); a.Add(70);//заполнение
a.Delete(1);}
//----------------------------------------------------------------------------
// 8. Двоичное дерево
// 2. Хранение обьектов
// 7. Поиск и возвращение элемента по номеру.
template <class T> class BTree
{ private:
BTree<T> *l,*r; //указатели на левое и правое поддеревья
T data;
public:
void Add(T &a);
T* Find(int &k);
BTree();
~BTree(); };
template <class T> void BTree<T>::Add(T &a)
{ if(data==NULL) { data=a; return; } //вставка в текущий
if(a>data)
{ if(r==NULL) r=new BTree<T>; r->Add(a); } else //в правый
{ if(l==NULL) l=new BTree<T>; l->Add(a); } } //в левый
template <class T> T* BTree<T>::Find(int &k)
{ if(k==0) return &data;
T* tmp=NULL; k--;
if(l!=NULL) {tmp=l->Find(k); if(tmp!=NULL) return tmp; }
if(r!=NULL) {tmp=r->Find(k); if(tmp!=NULL) return tmp; }
return NULL; }
template <class T> BTree<T>::BTree()
{ l=NULL; r=NULL; data=0; }//инициализация
template <class T> BTree<T>::~BTree()
{ data=0; //удаление данных
if(l!=NULL) delete l; // -//- левого поддерева
if(r!=NULL) delete r; } // -//- правого поддерева
void main()
{ BTree<long> a; //двоичное дерево из long-ов
a.Add(10); a.Add(3); a.Add(210); a.Add(70);//заполнение
long m=*a.Find(1);}
←предыдущая следующая→
... 18 19 20 21 22 23 24 25 26 27
|
|