Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <tchar.h>
- #include <iostream>
- using namespace std;
- template<class T>
- struct ANode
- {
- T data;
- ANode<T> *down, *right;
- ANode(T dd, ANode<T> *d = nullptr, ANode<T> *r = nullptr) :
- data(dd), down(d), right(r) {}
- };
- template<class T>
- void print(ANode<T> *r, int offset = 0)
- {
- if (r == nullptr) return;
- for (int i = 0; i<offset; i++)
- cout << " ";
- cout << r->data << endl;
- print(r->down, offset + 3);
- print(r->right, offset);
- }
- template<class T>
- int count2(ANode<T> *r)
- {
- int c = 0;
- if (r == nullptr) return c;
- r = r->down;
- while (r != nullptr)
- {
- c++;
- r = r->right;
- }
- return c;
- }
- template<class T>
- ANode<int> *find(ANode<T> *r, int d1, int d2){
- int c = 0;
- ANode<T> *f = NULL;
- r = r->down;
- while (r != nullptr)
- {
- if (r->data == d1)
- {
- f = r;
- r = r->down;
- while (r != nullptr)
- {
- if (r->data == d2) return f;
- r = r->right;
- }
- }
- r = r->right;
- }
- }
- template<class T>
- ANode<int> Ad(ANode<T> *r, int d1){
- ANode<int> *tree1 = &ANode<int>(d1, nullptr, r->down);
- ANode<int> *tree3 = &(ANode<int>(r->data, tree1, nullptr));
- print(tree3);
- return *tree3;
- }
- template<class T>
- ANode<int> Dell(ANode<T> *r){
- ANode<T> *f = NULL;
- ANode<T> *c = NULL;
- ANode<int> *tree1 = &(ANode<int>(r->data, r->down->right, nullptr));
- f = r->down;
- f->right = NULL;
- r = tree1->down;
- while (r->right)
- {
- r = r->right;
- c = r;
- }
- c->right = f;
- print(tree1);
- return *tree1;
- }
- int main()
- {
- int d1, d2;
- ANode<int> *tree2 = new ANode<int>(1,
- new ANode<int>(2,
- new ANode<int>(5,
- nullptr,
- new ANode<int>(6,
- nullptr,
- new ANode<int>(7))),
- new ANode<int>(3,
- new ANode<int>(8),
- new ANode<int>(4,
- new ANode<int>(9,
- nullptr,
- new ANode<int>(10))))));
- print(tree2);
- cout << "Number: " << count2(tree2) << endl; //посчитать число сыновей
- cin >> d1 >> d2;
- ANode<int> *f = find(tree2, d1, d2);
- cout << "Derevo: " << endl;
- print(f->down);
- cout << "Derevo2: " << endl;
- Ad(tree2, d1);
- cout << "Derevo3: " << endl;
- Dell(tree2);
- //cout << "Derevo 2 : " << endl;
- //print(tree2);
- //Задание:
- //1) Написать функцию, возвращающую указатель на первого сына корня с данными d1, у которого есть сын с
- //данными d2(d1 и d2 — параметры функции).
- //2) Написать процедуру, вставляющую в дерево первого сына корня с данными, переданными в качестве параметра
- //3) Написать процедуру, удаляющую первого сына корня (его сыновья, если такие были, становятся сыновьями
- //корня перед бывшим вторым сыном корня).
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement