Advertisement
Guest User

Tree

a guest
Nov 8th, 2014
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.86 KB | None | 0 0
  1. _________________________h_______________________________________
  2. #ifndef TREE_H
  3. #define TREE_H
  4.  
  5. #include "street.h"
  6.  
  7. #include <typeinfo>
  8.  
  9. struct Node
  10. {
  11.     Person *info;
  12.     Node *left;
  13.     Node *right;
  14. };
  15.  
  16. class Tree
  17.  
  18. {
  19.     friend class Design;
  20.  
  21.     Node *der;
  22.     Person * searched;
  23.     Node * searched_2;
  24.  
  25.     void add_not(Person *MAN, Node *&der);
  26.     void sear_not(Node *der, int);
  27.     void sear_not2(Node *der, int);
  28.     void clear(Node *der);
  29.  
  30. public:
  31.  
  32.     Tree ();
  33.    ~Tree ();
  34.  
  35.     Person * sear(int);
  36.     Node * searNode(int);
  37.     void add(Person *MAN);
  38. };
  39.  
  40. #endif // TREE_H
  41.  
  42. ___________________________-cpp______________________________
  43. #include "tree.h"
  44.  
  45. Tree::Tree()
  46. {
  47.     der = NULL;
  48.  
  49.     searched = NULL;
  50. }
  51.  
  52. Person * Tree::sear(int str)
  53. {
  54.     sear_not(der, str);
  55.  
  56.     Person * temp2 = searched;
  57.     searched = NULL;
  58.  
  59.     return temp2;
  60. }
  61.  
  62. Node * Tree::searNode(int str)
  63. {
  64.     sear_not(der, str);
  65.  
  66.     Node * temp2 = searched_2;
  67.     searched_2 = NULL;
  68.  
  69.     return temp2;
  70. }
  71.  
  72. void Tree::sear_not(Node *der, int str)
  73. {
  74.     if(der != NULL)
  75.     {
  76.         sear_not(der->left, str);
  77.         if(der->info->getId() == str) searched = der->info;
  78.         sear_not(der->right, str);
  79.     }
  80. }
  81.  
  82. void Tree::sear_not2(Node *der, int str)
  83. {
  84.     if(der != NULL)
  85.     {
  86.         sear_not(der->left, str);
  87.         if(der->info->getId() == str) searched_2 = der;
  88.         sear_not(der->right, str);
  89.     }
  90. }
  91.  
  92. void Tree::add(Person *MAN)
  93. {
  94.     add_not(MAN, der);
  95. }
  96.  
  97. void Tree::add_not(Person *MAN, Node *&der)
  98. {
  99.     if(der == NULL)
  100.     {
  101.         der = new Node;
  102.         if(typeid(*MAN) == typeid(sss)) der->info = new sss(*dynamic_cast<sss*>(MAN));
  103.         else der->info = new Person(*MAN);
  104.         der->left = der->right = NULL;
  105.     }
  106.     else
  107.     {
  108.         if(MAN->getAge() < der->info->getAge())
  109.         {
  110.             if(der->left != NULL) add_not(MAN, der->left);
  111.             else
  112.             {
  113.                 der->left = new Node;
  114.                 der->left->left = der->left->right = NULL;
  115.                 if(typeid(*MAN) == typeid(sss)) der->left->info = new sss(*dynamic_cast<sss*>(MAN));
  116.                 else der->left->info = new Person(*MAN);
  117.             }
  118.         }
  119.  
  120.         if(MAN->getAge() >= der->info->getAge())
  121.         {
  122.             if(der->right != NULL) {add_not(MAN, der->right);}
  123.             else
  124.             {
  125.                 der->right = new Node;
  126.                 der->right->left = der->right->right = NULL;
  127.                 if(typeid(*MAN) == typeid(sss)) der->right->info = new sss(*dynamic_cast<sss*>(MAN));
  128.                 else der->right->info = new Person(*MAN);
  129.             }
  130.         }
  131.     }
  132. }
  133.  
  134. void Tree::clear(Node *der)
  135. {
  136.     if(der == NULL) return;
  137.     clear(der->left);
  138.     delete der;
  139.     clear(der->right);
  140. }
  141.  
  142. Tree::~Tree()
  143. {
  144.     clear(der); der = NULL;
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement