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


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

struct ttree {
    std::string inf;  // число храним как строку для подсчёта символов
    ttree *left, *right;
};

ttree* addtree(ttree *proot, std::string 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 = (std::stoi(inf) < std::stoi(ps->inf));
        if (b) ps = ps->left;
        else ps = ps->right;
    }
    if (b) pr->left = nl;
    else pr->right = nl;
    return proot;
}

// Задание №7: подсчёт количества символов во всех строках-числах
int countAllChars(ttree *p) {
    if (p == NULL) return 0;
    return countAllChars(p->left) + countAllChars(p->right) + p->inf.length();
}

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

void deltree(ttree *p) {
    if (p == NULL) return;
    deltree(p->left);
    deltree(p->right);
    delete p;
}

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() % 201 - 100;  // от -100 до +100
        std::cout << nums[i] << " ";
    }
    
    // Первое число как корень (строкой)
    root = new ttree{std::to_string(nums[0]), NULL, NULL};
    
    // Остальные добавляем через addtree
    for (int i = 1; i < 10; i++) {
        root = addtree(root, std::to_string(nums[i]));
    }
    
    std::cout << "\n\nДерево (по возрастанию): ";
    printTree(root);
    
    // Задание №7
    int totalChars = countAllChars(root);
    std::cout << "\n\nОбщее количество символов во всех числах: " 
              << totalChars << std::endl;
    
    // Пояснение: считаем каждый символ (знак минус, цифры)
    std::cout << "Пояснение: ";
    printTree(root);
    std::cout << "\nСумма длин: ";
    for (int i = 0; i < 10; i++) {
        std::string s = std::to_string(nums[i]);
        std::cout << s.length() << " ";
    }
    std::cout << "= " << totalChars << std::endl;
    
    deltree(root);
    return 0;
}