From 22a1fec9eedd614023e654b0377a1cba6e6978f3 Mon Sep 17 00:00:00 2001 From: Martin Skachkov Date: Sat, 3 Dec 2022 13:26:02 +0200 Subject: add solutions --- Seminar08/inorder-traversal.cpp | 23 +++++++++++++++ Seminar08/min-max-elem.cpp | 64 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 Seminar08/inorder-traversal.cpp create mode 100644 Seminar08/min-max-elem.cpp diff --git a/Seminar08/inorder-traversal.cpp b/Seminar08/inorder-traversal.cpp new file mode 100644 index 0000000..7c7fb73 --- /dev/null +++ b/Seminar08/inorder-traversal.cpp @@ -0,0 +1,23 @@ +#include "tree-utils.h" + +template +void inorderTraversal(Tree *tree) { + if (tree == nullptr) { + return; + } + + inorderTraversal(tree->left); + std::cout << tree->data << ' '; + inorderTraversal(tree->right); +} + +int main() { + Tree *root = new Tree(8, new Tree(3, new Tree(1), new Tree(6, new Tree(4), new Tree(7))), new Tree(10, nullptr, new Tree(14, new Tree(13)))); + + inorderTraversal(root); //изпечатва елементите на дървото сортирано + std::cout << '\n'; + printTree(root); + + freeTree(root); + return 0; +} \ No newline at end of file diff --git a/Seminar08/min-max-elem.cpp b/Seminar08/min-max-elem.cpp new file mode 100644 index 0000000..2de8543 --- /dev/null +++ b/Seminar08/min-max-elem.cpp @@ -0,0 +1,64 @@ +#include "tree-utils.h" +#include + +// for regular binary trees +template +int max_elem(Tree *tree) { + int res = tree->data; + + if (tree->left != nullptr) { + res = std::max(res, max_elem(tree->left)); + } + if (tree->right != nullptr) { + res = std::max(res, max_elem(tree->right)); + } + + return res; +} + +template +int min_elem(Tree *tree) { + int res = tree->data; + + if (tree->left != nullptr) { + res = std::min(res, min_elem(tree->left)); + } + if (tree->right != nullptr) { + res = std::min(res, min_elem(tree->right)); + } + + return res; +} + +// for binary search trees +template +int max_elem_bst(Tree *tree) { + while (tree->right != NULL) + tree = tree->right; + + return tree->data; +} + +template +int min_elem_bst(Tree *tree) { + while (tree->left != NULL) + tree = tree->left; + + return tree->data; +} + +int main() { + Tree *regularTree = new Tree(2, new Tree(3, new Tree(4), new Tree(5)), new Tree(13, new Tree(7), new Tree(8))); + printTree(regularTree); + std::cout << "Maximum element in regular binary tree: " << max_elem(regularTree) << '\n'; + std::cout << "Minimum element in regular binary tree: " << min_elem(regularTree) << '\n'; + + Tree *binarySearchTree = new Tree(8, new Tree(3, new Tree(1), new Tree(6, new Tree(4), new Tree(7))), new Tree(10, nullptr, new Tree(14, new Tree(13)))); + printTree(binarySearchTree); + std::cout << "Maximum element in bs tree: " << max_elem_bst(binarySearchTree) << '\n'; + std::cout << "Minimum element in bs tree: " << min_elem_bst(binarySearchTree) << '\n'; + + freeTree(regularTree); + freeTree(binarySearchTree); + return 0; +} \ No newline at end of file -- cgit v1.3.1-23-gd82d