#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;
}