Индексация в дереве
Как мы знаем индекс - это уникальное значение каждого элемента. В моей программе индексирование работает немножко некорректно:

Введу немного в курс программы.
Это у меня небинарное дерево, которое ограничено 3 уровнями в иерархии и каждый родительский должен иметь 4 узла, но у нас присутсвует дисперсия = 2, из-за чего это значение разбрасывается [2;6].
Первое значение у каждого узла - это его уровень в иерархии
Второе значение у каждого узла - это его индекс
Третье значение у узла - это его ключ.
Как видите, эти "уникальные" значения еще не уникальны, так как иногда повторяются,мне нужно сделать так, чтобы значения индексов на одном уровне не повторялись, т.е. [0 ; число_узлов_на_уровне]. Как это сделать?
Вот структура дерева:
struct Node
{
int key = 0; //ключ
int id = 0; //индекс
int level = 0; //уровень в иерархии
Node* parent = nullptr; //указатель на родителя
Node** son = nullptr; //массив указателей на сыновей
int count_son = 0; //количество сыновей
};
Функция создания дерева:
Node* createTree(Node* node, int id, int level, int dispersion)
{
if (node->level < 3) {
node->id = id;
node->level = level;
node->key = rand() % 100;
node->count_son = rand() % (4+dispersion-1)+(4-dispersion); //dispersion can't be > than 4
node->son = new Node * [node->count_son];
level++;
for (int i = 0; i < node->count_son; i++)
{
node->son[i] = new Node;
node->son[i]->parent = node;
node->son[i]->id = id+i; //i
node->son[i]->level = level;
node->son[i]->key = rand() % 100;
}
for (int i = 0; i < node->count_son; i++)
createTree(node->son[i], id+i, level, dispersion);
return node;
}
else node->count_son = 0;
return node;
}
Ответы (1 шт):
Варианты:
- после создания дерева снова пройти по нему и записать индексы
- держать массив счетчиков
int count[3]и индексу присваивать счетчикnode->son[i]->id = count[level]; count[level]++;
Непонятно одно - зачем это вообще? Зачем вообще это поле? Это же дерево, а не массив - по индексу к элементам не обратишься. И потом будут проблемы при вставке и удалении элемента, при перестановке элементов - после любой из этих операций нужно пройти по всему дереву и заново установить все индексы. Ответьте на вопрос - для какой операции нужно поле индекс?