Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MyTP3Lab.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <conio.h>
- #include <cmath>
- using namespace std;
- struct node
- {
- int info; //Информационное поле
- node *l, *r;//Левая и Правая часть дерева
- };
- node * tree = NULL; //Объявляем переменную, тип которой структура Дерево
- /*ФУНКЦИЯ ЗАПИСИ ЭЛЕМЕНТА В БИНАРНОЕ ДЕРЕВО*/
- void push(int a, node **t)
- {
- if ((*t) == NULL) //Если дерева не существует
- {
- (*t) = new node; //Выделяем память
- (*t)->info = a; //Кладем в выделенное место аргумент a
- (*t)->l = (*t)->r = NULL; //Очищаем память для следующего роста
- return;
- }
- //Дерево есть
- if (a>(*t)->info) push(a, &(*t)->r); //Если аргумент а больше чем текущий элемент, кладем его вправо
- else push(a, &(*t)->l); //Иначе кладем его влево
- }
- /*ФУНКЦИЯ ОТОБРАЖЕНИЯ ДЕРЕВА НА ЭКРАНЕ*/
- void print_Tree(node *p, int level, int *elements)
- {
- if (p)
- {
- print_Tree(p->l, level + 1, elements);
- for (int i = 0; i< level; i++) cout << " ";
- cout << p->info << endl;
- elements[level]++;
- print_Tree(p->r, level + 1, elements);
- }
- }
- /*АНАЛИЗИРУЕМ ДЕРЕВО*/
- void parse_Tree(node *p, int level, int badlvl)
- {
- if (p)
- {
- if (level == badlvl - 1)
- {
- p->l = NULL;
- p->r = NULL;
- }
- parse_Tree(p->l, level + 1, badlvl);
- parse_Tree(p->r, level + 1, badlvl);
- }
- }
- void main()
- {
- setlocale(LC_ALL, "Russian");
- int n; //Количество элементов
- int s; //Число, передаваемое в дерево
- cout << "Введите количество элементов: ";
- cin >> n; //Вводим количество элементов
- for (int i = 0; i<n; ++i)
- {
- cout << "Введите число: ";
- cin >> s; //Считываем элемент за элементом
- push(s, &tree); //И каждый кладем в дерево
- }
- cout << "Ваше дерево:\n";
- int level = 0;
- int elements[50];
- for (int i = 0; i < 50; i++)
- elements[i] = 0;
- int badlvl = 0;
- print_Tree(tree, level, elements);
- for (int i = 0; i < 50; i++)
- {
- int temp = pow(2, i);
- if (elements[i] != temp)
- {
- badlvl = i;
- break;
- }
- }
- level = 0;
- parse_Tree(tree, level, badlvl);
- level = 0;
- cout << "\n *******************" << endl;
- print_Tree(tree, level, elements);
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement