From c516610609be1e62628badbe4fc25f5775275be2 Mon Sep 17 00:00:00 2001 From: Desislava Shunina <115353472+desiish@users.noreply.github.com> Date: Tue, 19 Nov 2024 17:40:15 +0200 Subject: add gifs and example function --- Practicum/pract07/ExampleFunctions.cpp | 85 ++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Practicum/pract07/ExampleFunctions.cpp (limited to 'Practicum/pract07/ExampleFunctions.cpp') diff --git a/Practicum/pract07/ExampleFunctions.cpp b/Practicum/pract07/ExampleFunctions.cpp new file mode 100644 index 0000000..9e81f98 --- /dev/null +++ b/Practicum/pract07/ExampleFunctions.cpp @@ -0,0 +1,85 @@ +#include +#include +#include + +template +struct TreeNode { + T data; + TreeNode* left; + TreeNode* right; + + TreeNode(const T& val) : data(val), left(nullptr), right(nullptr) {} +}; + +// Проверка дали даден възел е листо +// Листо е възел, който няма деца +template +bool isLeaf(TreeNode* node) { + return node && !node->left && !node->right; +} + +// Проверка дали даден елемент се съдържа в дърво +template +bool contains(TreeNode* root, T value) { + if (root == nullptr) return false; + + if (root->data == value) return true; + + return contains(root->left, value) || contains(root->right, value); +} + +// Намиране на височина на дърво +// Височината на дърво е дължината на най-дългия път от корена до някое листо +template +int getHeight(TreeNode* root) { + if (!root) return -1; + + int leftHeight = getHeight(root->left); + int rightHeight = getHeight(root->right); + + return 1 + std::max(leftHeight, rightHeight); +} + +// Преброяване на възлите в дърво +template +int countNodes(TreeNode* root) { + if (!root) return 0; + + if (!root->left && !root->right) return 1; + + return 1 + countNodes(root->left) + countNodes(root->right); +} + +int main() { + // Създаване на двоично дърво от цели числа + TreeNode* root = new TreeNode(1); + root->left = new TreeNode(2); + root->right = new TreeNode(3); + root->left->left = new TreeNode(4); + root->left->right = new TreeNode(5); + root->right->left = new TreeNode(6); + root->right->right = new TreeNode(7); + + // Как изглежда дървото: + // 1 + // / \ + // 2 3 + // / \ / \ + // 4 5 6 7 + + // Проверка дали даден възел е листо + std::cout << "Is 4 a leaf: " << std::boolalpha << isLeaf(root->left->left) << std::endl; // true + std::cout << "Is 3 a leaf: " << std::boolalpha << isLeaf(root->right) << std::endl; // false + + // Проверка дали даден елемент се съдържа в дървото + std::cout << "Does the tree contain 5: " << std::boolalpha << contains(root, 5) << std::endl; // true + std::cout << "Does the tree contain 8: " << std::boolalpha << contains(root, 8) << std::endl; // false + + // Намиране на височината на дървото + std::cout << "Height of the tree: " << getHeight(root) << std::endl; // 2 + + // Преброяване на възлите в дървото + std::cout << "Total nodes in the tree: " << countNodes(root) << std::endl; // 7 + + return 0; +} -- cgit v1.3.1-23-gd82d