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 From 1ca2c9e9702f97e878ed51ecea8f1403e7e67403 Mon Sep 17 00:00:00 2001 From: Martin Skachkov Date: Sun, 4 Dec 2022 09:14:45 +0200 Subject: changes --- Seminar08/inorder-traversal.cpp | 2 +- Seminar08/min-max-elem.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'Seminar08/min-max-elem.cpp') diff --git a/Seminar08/inorder-traversal.cpp b/Seminar08/inorder-traversal.cpp index 7c7fb73..c9a9bd6 100644 --- a/Seminar08/inorder-traversal.cpp +++ b/Seminar08/inorder-traversal.cpp @@ -1,7 +1,7 @@ #include "tree-utils.h" template -void inorderTraversal(Tree *tree) { +void inorderTraversal(const Tree *tree) { if (tree == nullptr) { return; } diff --git a/Seminar08/min-max-elem.cpp b/Seminar08/min-max-elem.cpp index 2de8543..cbd8560 100644 --- a/Seminar08/min-max-elem.cpp +++ b/Seminar08/min-max-elem.cpp @@ -3,8 +3,8 @@ // for regular binary trees template -int max_elem(Tree *tree) { - int res = tree->data; +T max_elem(Tree *tree) { + T res = tree->data; if (tree->left != nullptr) { res = std::max(res, max_elem(tree->left)); @@ -17,8 +17,8 @@ int max_elem(Tree *tree) { } template -int min_elem(Tree *tree) { - int res = tree->data; +T min_elem(Tree *tree) { + T res = tree->data; if (tree->left != nullptr) { res = std::min(res, min_elem(tree->left)); @@ -32,16 +32,16 @@ int min_elem(Tree *tree) { // for binary search trees template -int max_elem_bst(Tree *tree) { - while (tree->right != NULL) +T max_elem_bst(Tree *tree) { + while (tree->right != nullptr) tree = tree->right; return tree->data; } template -int min_elem_bst(Tree *tree) { - while (tree->left != NULL) +T min_elem_bst(Tree *tree) { + while (tree->left != nullptr) tree = tree->left; return tree->data; -- cgit v1.3.1-23-gd82d