Задать вопрос
@kopelev2000

Нужно построить дерево общего вида, как добавлять узлы и выводить дерево на экран?

Как должен выглядеть алгоритм добавления узла, вывода его на экран для дерева общего вида (на C/C++). Нужно реализовать для данной структуры:
Структура

struct Node
{
    char* name; // Имя узла
    Node* son=NULL; // Дочерний узел
    Node* brother=NULL; // Следующий узел на этом же уровне
};
Node* top = NULL;



Само дерево должно выглядеть как-то так:
Вид

615ddd811b16b643747598.png


Функция, которую написал я, но она не позволяет составить дерево произвольной глубины:
Функция добавления

void Add(Node*& top, char* Key, char* AddKey)
{
    if (top == NULL)
    {
        top = new Node;
        top->name = Key;
        top->brother = NULL;
        top->son = NULL;
        return;
    }
    else
    {
        if (top->name  == AddKey && top->son == NULL) // добавить сына, если нет сыновей у корня
        {
            Add(top->son, Key, AddKey);
            return;
        }
        if (top->name  == AddKey && top->son != NULL)
        {
            if (top->son->brother == NULL)                     // добавить брата сыну, если есть такой
            {
                Add(top->son->brother, Key, AddKey);
                return;
            }
            if (top->son->brother != NULL && top->son->brother->brother == NULL) // добавить брата, если есть уже 1 брат
            {
                Add(top->son->brother->brother, Key, AddKey);
                return;
            }
            if (top->son->brother != NULL && top->son->brother->brother != NULL) // добавить брата, если уже есть 2 брата
            {


                Add(top->son->brother->brother->brother, Key, AddKey);
                return;
            }
        }
        if (top->name != AddKey && top->son != NULL)
        {
            Add(top->son->son, Key, AddKey);
        }
    }
}



+Как реализовать функцию вывода дерева?
В таком формате:
A
B  C  D  E
F G  H I  J  K
...


Функция вывода

void PrintTree(Node* top) {
    if (top == NULL) return;
    cout << top->name << endl;
    PrintTree(top->brother);
    PrintTree(top->son);
}

  • Вопрос задан
  • 233 просмотра
Подписаться 1 Средний 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
задача по распечатке дерева не лишена эстетики. Запилил на js, перевести на плюсы, думаю, не очень трудно

https://jsfiddle.net/uos2jqy7/1/ (см. в консоль)

добавление узлов сделать тоже нетрудно, только там должно быть несколько функций: добавить корневой узел, добавить сына/брата для некоторого узла.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы