Рандомная генерация дерева

Нужно сгенерировать небинарное дерево, которое задаётся лишь макс. числом узлов и дисперсией. (Степень дерева const = 4, => при указывании дисперсии = 2, у узлов может быть от 2 до 6 сыновей)

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)
{
    node->id = id;
    node->level = level;

    node->count_son = rand() % (4-dispersion) + dispersion;
    node->key = rand() % 100;
    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;
        node->son[i]->level = level;
    }

    for (int i = 0; i < node->count_son; i++)
        createTree(node->son[i], id + i, level, dispersion);

    return node;
}

В данный момент вроде как всё генерируется, но т.к. ограничения на создание нет, то компилироваться не может. Как можно ограничить максимальное число узлов?


Ответы (0 шт):