Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _________________________h_______________________________________
- #ifndef TREE_H
- #define TREE_H
- #include "street.h"
- #include <typeinfo>
- struct Node
- {
- Person *info;
- Node *left;
- Node *right;
- };
- class Tree
- {
- friend class Design;
- Node *der;
- Person * searched;
- Node * searched_2;
- void add_not(Person *MAN, Node *&der);
- void sear_not(Node *der, int);
- void sear_not2(Node *der, int);
- void clear(Node *der);
- public:
- Tree ();
- ~Tree ();
- Person * sear(int);
- Node * searNode(int);
- void add(Person *MAN);
- };
- #endif // TREE_H
- ___________________________-cpp______________________________
- #include "tree.h"
- Tree::Tree()
- {
- der = NULL;
- searched = NULL;
- }
- Person * Tree::sear(int str)
- {
- sear_not(der, str);
- Person * temp2 = searched;
- searched = NULL;
- return temp2;
- }
- Node * Tree::searNode(int str)
- {
- sear_not(der, str);
- Node * temp2 = searched_2;
- searched_2 = NULL;
- return temp2;
- }
- void Tree::sear_not(Node *der, int str)
- {
- if(der != NULL)
- {
- sear_not(der->left, str);
- if(der->info->getId() == str) searched = der->info;
- sear_not(der->right, str);
- }
- }
- void Tree::sear_not2(Node *der, int str)
- {
- if(der != NULL)
- {
- sear_not(der->left, str);
- if(der->info->getId() == str) searched_2 = der;
- sear_not(der->right, str);
- }
- }
- void Tree::add(Person *MAN)
- {
- add_not(MAN, der);
- }
- void Tree::add_not(Person *MAN, Node *&der)
- {
- if(der == NULL)
- {
- der = new Node;
- if(typeid(*MAN) == typeid(sss)) der->info = new sss(*dynamic_cast<sss*>(MAN));
- else der->info = new Person(*MAN);
- der->left = der->right = NULL;
- }
- else
- {
- if(MAN->getAge() < der->info->getAge())
- {
- if(der->left != NULL) add_not(MAN, der->left);
- else
- {
- der->left = new Node;
- der->left->left = der->left->right = NULL;
- if(typeid(*MAN) == typeid(sss)) der->left->info = new sss(*dynamic_cast<sss*>(MAN));
- else der->left->info = new Person(*MAN);
- }
- }
- if(MAN->getAge() >= der->info->getAge())
- {
- if(der->right != NULL) {add_not(MAN, der->right);}
- else
- {
- der->right = new Node;
- der->right->left = der->right->right = NULL;
- if(typeid(*MAN) == typeid(sss)) der->right->info = new sss(*dynamic_cast<sss*>(MAN));
- else der->right->info = new Person(*MAN);
- }
- }
- }
- }
- void Tree::clear(Node *der)
- {
- if(der == NULL) return;
- clear(der->left);
- delete der;
- clear(der->right);
- }
- Tree::~Tree()
- {
- clear(der); der = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement