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

Дана программа, позволяющая: 1)создать N-узловое дерево, вводимое пользователем, 2) вывести это дерево. Как 3) удалить заданный узел дерева так, что этот удаляемый узел заменится самым левым дочерним узлом?

#include <iostream>

#include <stdlib.h>

using namespace std;

//using namespace system

struct Tree 
{
    int id; //индекс
    int level; //уровень в иерархии
    int count_son; //количество сыновей
    struct Tree** son; //массив указателей на сыновей
    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)
{
    if (node)
    { }
}


int main()
{
    size_t number; int level, index;
    setlocale(LC_ALL, "RUS");
    Tree* root;
    root = new Tree;
    root = createTree(root, 0, 0);
    cout << "\n-----Итоговое дерево-----\n";
    printTree(root);
    cout << "Введите узел (X-Y), который хотите удалить: ";
    cin >> level >> index;
    system("pause");
    return 0;
}

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