Удаление узла в дереве

Дана программа, позволяющая: 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;
}

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