Загрузка данных


#include <iostream>
#include <cstdlib>
#include <ctime>

struct ttree {
    int inf;
    ttree *left, *right;
};

ttree* addtree(ttree *proot, int inf) {
    ttree *nl = new ttree{inf, NULL, NULL};
    if (proot == NULL) return nl;
    ttree *ps = proot, *pr;
    bool b;
    while (ps != NULL) {
        pr = ps;
        b = (inf < ps->inf);
        if (b) ps = ps->left;
        else ps = ps->right;
    }
    if (b) pr->left = nl;
    else pr->right = nl;
    return proot;
}

ttree* findParent(ttree* root, int key, ttree** parent) {
    ttree* cur = root;
    *parent = NULL;
    while (cur && cur->inf != key) {
        *parent = cur;
        if (key < cur->inf) cur = cur->left;
        else cur = cur->right;
    }
    return cur;
}

void delSub(ttree* node) {
    if (!node) return;
    delSub(node->left);
    delSub(node->right);
    delete node;
}

ttree* deleteBranch(ttree* root, int key) {
    ttree *par, *tgt = findParent(root, key, &par);
    if (!tgt) { std::cout << "Не найден\n"; return root; }
    if (!par) { delSub(tgt); return NULL; }
    if (par->left == tgt) par->left = NULL;
    else par->right = NULL;
    delSub(tgt);
    std::cout << "Ветвь с ключом " << key << " удалена\n";
    return root;
}

void print(ttree* p) {
    if (!p) return;
    print(p->left);
    std::cout << p->inf << " ";
    print(p->right);
}

int main() {
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    
    ttree *root = NULL;
    int nums[10];
    
    std::cout << "Исходные числа: ";
    for (int i = 0; i < 10; i++) {
        nums[i] = rand() % 101 - 50;  // от -50 до +50
        std::cout << nums[i] << " ";
        root = addtree(root, nums[i]);
    }
    
    std::cout << "\nДерево (по возрастанию): ";
    print(root);
    
    std::cout << "\nВведите ключ для удаления ветви: ";
    int key;
    std::cin >> key;
    
    root = deleteBranch(root, key);
    
    std::cout << "Итог: ";
    print(root);
    std::cout << "\n";
    
    return 0;
}