Удаление узла в дереве
Дана программа, позволяющая: 1)создать N-узловое дерево, вводимое пользователем, 2) вывести это дерево. Как 3) удалить заданный узел дерева?
#include <iostream>
using namespace std;
struct Tree
{
int id; //индекс
int level; //уровень в иерархии
int count_son; //количество сыновей
struct Tree** son; //массив указателей на сыновей
struct Tree* parent; //указатель на родителя
int key; //ключ
};
struct Tree* createTree(struct Tree* node, int id, int level)
{
node->id = id;
node->level = level;
cout << "\nВведите степень узла + его ключ. Текущая позиция: " << node->level << "-" << node->id << "\n";
cin >> node->count_son >> node->key;
node->son = new struct Tree* [node->count_son]; //здесь нужно обозначить родительский узел?
level++;
for (int i = 0; i < node->count_son; i++)
{
node->son[i] = new Tree;
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);
return node;
}
void printTree(struct Tree* node)
{
if (node)
{
for (int i = 0; i < node->level; i++) cout << "| ";
if (node->son != NULL) cout << "[+]";
cout << "(" << node->level << "-" << node->id << ") = "<< node->key << endl;
if (node->count_son != 0)
for (int i = 0; i < node->count_son; i++)
printTree(node->son[i]);
}
}
void nodeKill(struct Tree* node, int key)
{
for (int i = 0; i < node->count_son; i++)
{
if (node->key == key)
{
node->parent->son[i] = node->son[0]; //Здесь мы "удаляем" наш узел
}
}
}
int main()
{
size_t number; int key; Tree* root;
setlocale(LC_ALL, "RUS");
root = new Tree;
root = createTree(root, 0, 0);
cout << "\n-----Получившееся дерево-----\n";
printTree(root);
cout << "Введите ключ узла, который хотите удалить: ";
cin >> key;
nodeKill(root, key);
cout << "\n-----Дерево с удалённым узлом-----\n";
printTree(root);
system("pause");
return 0;
}