Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- //бинарное дерево
- class Tree {
- //узел дерева
- struct Node {
- int info;
- Node* left; //указатель на левое поддерево
- Node* right; //правое
- Node(int info) {
- this->info = info;
- left = right = nullptr;
- }
- };
- Node* root; //корень дерева
- protected:
- //добавление
- void add(Node*& root, int info) {
- if (root) {
- if (root->info < info) {
- add(root->right, info);
- }
- else {
- add(root->left, info);
- }
- }
- else {
- root = new Node(info);
- }
- }
- //вывод дерева с учетом уровня
- void print(Node* root, int lvl = 0) {
- if (root) {
- print(root->right, lvl + 1);
- for (int i = 0; i < lvl; i++) {
- cout << " ";
- }
- cout << root->info << endl;
- print(root->left, lvl + 1);
- }
- }
- //7
- void calc(Node* root,int lvl,int& res, int l = 0) {
- if (root) {
- calc(root->left, lvl, res, l + 1);
- if (l == lvl) {
- res++;
- }
- calc(root->right, lvl, res, l + 1);
- }
- }
- //очистка
- void clear(Node*& root) {
- if (root) {
- clear(root->left);
- clear(root->right);
- delete root;
- root = nullptr;
- }
- }
- public:
- //конструктор
- Tree() {
- root = nullptr;
- }
- //добавление элемента в дерево
- void add(int info) {
- add(root, info);
- }
- //вывод элементов дерева
- void print() {
- print(root);
- }
- //подсчет
- int calc(int lvl) {
- int res = 0;
- calc(root,lvl,res);
- return res;
- }
- //деструктор
- ~Tree() {
- clear(root);
- }
- };
- //для теста
- int main() {
- srand(time(NULL));
- system("chcp 1251"); //кодировка страницы
- system("cls");
- //заполняем случайно дерево
- int n = 0;
- cout << "Укажите размер дерева -> ";
- cin >> n;
- if (n <= 0) {
- n = 10;
- }
- Tree tr;
- for (int i = 0; i < n; i++) {
- tr.add(rand() % 100);
- }
- cout << "Сформированное дерево:" << endl;
- tr.print();
- //функция по заданию
- cout << "Укажите уровень дерева (0 - корень) -> ";
- int lvl;
- cin >> lvl;
- cout << "Число вершин на " << lvl << " уровне дерева = " << tr.calc(lvl) << endl;
- system("pause");
- return 0;
- }
Add Comment
Please, Sign In to add comment