Advertisement
amsavchenko

Untitled

May 16th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.20 KB | None | 0 0
  1.  // 1. map
  2.     void map (treenode<T> *node, T value) {
  3.         if (node != nullptr) {
  4.             node->data = value;
  5.             map (node->leftkid, value);
  6.             map (node->rightkid, value);
  7.         }
  8.     }
  9.    
  10.     bool check (treenode<string> *node) {
  11.         if ((node->data).length() < 5) return true;
  12.         else return false;
  13.     }
  14.    
  15.     bool check (treenode<void*> *node) {
  16.         if (get_value_of_function(node) < 10) return true;
  17.         else return false;
  18.     }
  19.    
  20.     // 2. where
  21.     void where (treenode<T> *node, tree<T> *new_tree) { // УКАЗАТЕЛЬ  на новое дерево
  22.         if (node != nullptr) {
  23.             if (check(node)) {
  24.                 T key = node->data;
  25.                 new_tree->insert(key);
  26.             }
  27.             where (node->leftkid, new_tree);
  28.             where (node->rightkid, new_tree);
  29.         }
  30.     }
  31.    
  32.    
  33.     // 3. слияние
  34.     void merge_trees (treenode<T> *node_of_1st_tree, tree<T> second_tree) {
  35.         // к дереву second_tree прибавляем все элементы дерева для к-ого вызвана ф-ия
  36.         if (node_of_1st_tree != nullptr) {
  37.             second_tree->insert(node_of_1st_tree->data);
  38.             merge_trees(node_of_1st_tree->leftkid, second_tree);
  39.             merge_trees(node_of_1st_tree->rightkid, second_tree);
  40.         }
  41.     }
  42.    
  43.     // 4. извлечение поддерева по заданному элементу
  44.     void subtree_extraction (treenode<T> *node, T value, tree<T> *res_tree, vector<treenode<T>*> *store) {
  45.         if (node != nullptr) {
  46.             if(node->data == value) {
  47.                 store->push_back(node);
  48.                 return;
  49.             }
  50.             else {
  51.                 subtree_extraction(node->leftkid, value, res_tree, store);
  52.                 subtree_extraction(node->rightkid, value, res_tree, store);
  53.                
  54.             }
  55.         // берем первое совпадение элемента в соответствии с обходом
  56.         if (!store->empty()) res_tree->root = store->at(0);
  57.         }
  58.     }
  59.    
  60.    
  61.     // 5. поиск элемента на вхождение
  62.     bool does_value_contain (treenode<T> *node, T value, bool* check) {
  63.         if (node != nullptr) {
  64.             if (node->data == value) {
  65.                 *check = true;
  66.             }
  67.             else {
  68.                 does_value_contain(node->leftkid, value, check);
  69.                 does_value_contain(node->rightkid, value, check);
  70.             }
  71.         }
  72.         if (*check == true) return true;
  73.         else return false;
  74.     }
  75.  
  76.  
  77.  
  78.  
  79. void map (T value) {
  80.         map (root, value);
  81.     }
  82. void where (tree<T> *new_tree) {
  83.         where (root, new_tree);
  84.     }
  85.     void merge_trees (tree<T> *second_tree) { //
  86.         merge_trees(root, second_tree);
  87.     }
  88.     void subtree_extraction (T value, tree<T> *res_tree) {
  89.         vector<treenode<T>*> *store = new vector<treenode<T>*>;
  90.         subtree_extraction(root, value, res_tree, store);
  91.         delete store;
  92.     }
  93.     bool does_value_contain (T value) {
  94.         bool* check = new bool;
  95.         return does_value_contain(root, value, check);
  96.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement