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

Есть данная структура, которая описывает дерево общего вида (каждая вершина которого может иметь произвольное число дочерних вершин):

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

Дерево должно выглядеть как-то так:

           A -- NULL
          /
         B---------------------------------C ------------------- D ----------NULL
        /                                 /                     /
       E---F--NULL                       G----NULL            NULL
      /     /                           /
    ...   NULL                        NULL
    

Есть функция добавления в дерево:

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);
}

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