Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 1. map
- void map (treenode<T> *node, T value) {
- if (node != nullptr) {
- node->data = value;
- map (node->leftkid, value);
- map (node->rightkid, value);
- }
- }
- bool check (treenode<string> *node) {
- if ((node->data).length() < 5) return true;
- else return false;
- }
- bool check (treenode<void*> *node) {
- if (get_value_of_function(node) < 10) return true;
- else return false;
- }
- // 2. where
- void where (treenode<T> *node, tree<T> *new_tree) { // УКАЗАТЕЛЬ на новое дерево
- if (node != nullptr) {
- if (check(node)) {
- T key = node->data;
- new_tree->insert(key);
- }
- where (node->leftkid, new_tree);
- where (node->rightkid, new_tree);
- }
- }
- // 3. слияние
- void merge_trees (treenode<T> *node_of_1st_tree, tree<T> second_tree) {
- // к дереву second_tree прибавляем все элементы дерева для к-ого вызвана ф-ия
- if (node_of_1st_tree != nullptr) {
- second_tree->insert(node_of_1st_tree->data);
- merge_trees(node_of_1st_tree->leftkid, second_tree);
- merge_trees(node_of_1st_tree->rightkid, second_tree);
- }
- }
- // 4. извлечение поддерева по заданному элементу
- void subtree_extraction (treenode<T> *node, T value, tree<T> *res_tree, vector<treenode<T>*> *store) {
- if (node != nullptr) {
- if(node->data == value) {
- store->push_back(node);
- return;
- }
- else {
- subtree_extraction(node->leftkid, value, res_tree, store);
- subtree_extraction(node->rightkid, value, res_tree, store);
- }
- // берем первое совпадение элемента в соответствии с обходом
- if (!store->empty()) res_tree->root = store->at(0);
- }
- }
- // 5. поиск элемента на вхождение
- bool does_value_contain (treenode<T> *node, T value, bool* check) {
- if (node != nullptr) {
- if (node->data == value) {
- *check = true;
- }
- else {
- does_value_contain(node->leftkid, value, check);
- does_value_contain(node->rightkid, value, check);
- }
- }
- if (*check == true) return true;
- else return false;
- }
- void map (T value) {
- map (root, value);
- }
- void where (tree<T> *new_tree) {
- where (root, new_tree);
- }
- void merge_trees (tree<T> *second_tree) { //
- merge_trees(root, second_tree);
- }
- void subtree_extraction (T value, tree<T> *res_tree) {
- vector<treenode<T>*> *store = new vector<treenode<T>*>;
- subtree_extraction(root, value, res_tree, store);
- delete store;
- }
- bool does_value_contain (T value) {
- bool* check = new bool;
- return does_value_contain(root, value, check);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement