-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAbstractTree.h
32 lines (26 loc) · 1.3 KB
/
AbstractTree.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#pragma once
#pragma once
#include "GroupContainer.h"
// Абстрактный класс: дерево
class AbstractTree : public GroupContainer
{
public:
// конструктор
AbstractTree(MemoryManager & mem) : GroupContainer(mem) {}
// деструктор
virtual ~AbstractTree() {}
class Iterator : public Container::Iterator
{
public:
// Переход к родительской вершине. Возвращает false если текущая вершина - корень или end().
virtual bool goToParent() = 0;
// Переход к дочерней вершине № child_index. Возвращает false если дочерней вершины с таким номером нет.
virtual bool goToChild(int child_index) = 0;
};
// Добавление элемента как дочернюю вершину № child_index вершины, на которую
// указывает итератор. В случае успешного добавления функция возвращает значение 0, в случае неудачи 1.
virtual int insert(Iterator * iter, int child_index, void* elem, size_t size) = 0;
// Удаление вершины, на которую указывает итератор. Если leaf_only==1 и вершина не является листом, возвращает false
// !!! Примечание: метод remove удаляет вершину вместе со всеми ее потомками
virtual bool remove(Iterator * iter, int leaf_only) = 0;
};