Нужно построить дерево общего вида, по заданной структуре, как добавлять узлы и выводить дерево на экран?
Есть данная структура, которая описывает дерево общего вида (каждая вершина которого может иметь произвольное число дочерних вершин):
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);
}