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/min-max-elem.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Seminar08/min-max-elem.cpp (limited to 'Seminar08/min-max-elem.cpp') 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