Website Summary Files Commits Branches @commit @diff @stats
path: root / Seminar08 / min-max-elem.cpp
blob: cbd8560df7951cbe4d3a3080fe95d9f18a5740e6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "tree-utils.h"
#include <cmath>

// for regular binary trees
template <typename T>
T max_elem(Tree<T> *tree) {
    T 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 <typename T>
T min_elem(Tree<T> *tree) {
    T 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 <typename T>
T max_elem_bst(Tree<T> *tree) {
    while (tree->right != nullptr)
        tree = tree->right;

    return tree->data;
}

template <typename T>
T min_elem_bst(Tree<T> *tree) {
    while (tree->left != nullptr)
        tree = tree->left;

    return tree->data;
}

int main() {
    Tree<int> *regularTree = new Tree<int>(2, new Tree<int>(3, new Tree<int>(4), new Tree<int>(5)), new Tree<int>(13, new Tree<int>(7), new Tree<int>(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<int> *binarySearchTree = new Tree<int>(8, new Tree<int>(3, new Tree<int>(1), new Tree<int>(6, new Tree<int>(4), new Tree<int>(7))), new Tree<int>(10, nullptr, new Tree<int>(14, new Tree<int>(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;
}