Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <iostream>
- using namespace std;
- struct tree
- {
- int data;
- tree * left;
- tree * right;
- };
- void add_to_q(tree *ochered[], int &e, tree *q)
- {
- ochered[e++] = q;
- }
- tree *q_pop(tree * ochered[], int &b)
- {
- return ochered[b++];
- }
- int average(tree *Tree, tree * ochered[], int &b, int &e)
- {
- int ans = 0;
- int n = 1;
- b = 0;
- e = 0;
- add_to_q(ochered, e, Tree);
- tree * a;
- while (b!=e)
- {
- a = q_pop(ochered, b);
- ans += a->data;
- if (a->left != NULL)
- {
- add_to_q(ochered, e, a->left);
- n++;
- }
- if (a->right != NULL)
- {
- add_to_q(ochered, e, a->right);
- n++;
- }
- }
- return ans / n;
- }
- void deleter(tree * &Tree, tree *ochered[], int &b, int &e, int aver)
- {
- b = e = 0;
- int id = 0;
- int m[100];
- add_to_q(ochered, e, Tree);
- tree * a;
- while (b != e)
- {
- a = q_pop(ochered, b);
- m[id++] = a->data;
- if (a->left != NULL)
- {
- add_to_q(ochered, e, a->left);
- }
- if (a->right != NULL)
- {
- add_to_q(ochered, e, a->right);
- }
- }
- for (int i = 0; i < id; i++)
- {
- if (m[i] < aver)
- {
- m[i] = -99999;
- }
- }
- b = e = 0;
- int i = 0;
- free(Tree);
- Tree = (tree *)malloc(sizeof(tree));
- Tree->left = NULL;
- Tree->right = NULL;
- add_to_q(ochered, e, Tree);
- while (m[i] == -99999)
- {
- i++;
- }
- Tree->data = m[i++];
- while (i!=id)
- {
- tree * a = q_pop(ochered, b);
- a->left = (tree *)malloc(sizeof(tree));
- a->left->left = NULL;
- a->left->right = NULL;
- while (i !=id && m[i] == -99999)
- {
- i++;
- }
- if (i == id) break;
- a->left->data = m[i++];
- if (i == id) break;
- add_to_q(ochered, e, a->left);
- if (i != id)
- {
- a->right = (tree*)malloc(sizeof(tree));
- a->right->right = NULL;
- a->right->left = NULL;
- while (i != id && m[i] == -99999)
- {
- i++;
- }
- if (i == id) break;
- a->right->data = m[i++];;
- add_to_q(ochered, e, a->right);
- }
- }
- }
- void print(tree *Tree, tree * ochered[], int &b, int &e)
- {
- b = e = 0;
- int id = 0;
- int m[100];
- add_to_q(ochered, e, Tree);
- tree * a;
- while (b != e)
- {
- a = q_pop(ochered, b);
- m[id++] = a->data;
- if (a->left != NULL)
- {
- add_to_q(ochered, e, a->left);
- }
- if (a->right != NULL)
- {
- add_to_q(ochered, e, a->right);
- }
- }
- for (int i = 0; i < id; i++)
- {
- if(m[i] >-9999)
- cout << m[i] << " ";
- }
- }
- int main()
- {
- tree* Tree = (tree *)malloc(sizeof(tree));
- Tree->left = NULL;
- Tree->right = NULL;
- int n;
- tree* ochered[100];
- int b = 0;
- int e = 0;
- cout << "Enter n" << endl;
- cin >> n;
- cout << "Enter numbers" << endl;
- add_to_q(ochered, e, Tree);
- cin >> Tree->data;
- n--;
- while (n != 0)
- {
- tree * a= q_pop(ochered, b);
- a->left = (tree *)malloc(sizeof(tree));
- a->left->left = NULL;
- a->left->right = NULL;
- cin >> a->left->data;
- add_to_q(ochered, e, a->left);
- n--;
- if (n != 0)
- {
- a->right = (tree*)malloc(sizeof(tree));
- cin >> a->right->data;
- add_to_q(ochered, e, a->right);
- a->right->right = NULL;
- a->right->left = NULL;
- n--;
- }
- }
- int Average = average(Tree, ochered, b, e);
- cout << "After deleting" << endl;
- print(Tree, ochered, b, e);
- deleter(Tree, ochered, b, e, Average);
- cout << endl << "Before" << endl;
- print(Tree,ochered,b,e);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement