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/Traversals.cpp | 98 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 Practicum/pract07/Traversals.cpp (limited to 'Practicum/pract07/Traversals.cpp') diff --git a/Practicum/pract07/Traversals.cpp b/Practicum/pract07/Traversals.cpp new file mode 100644 index 0000000..61f8bb1 --- /dev/null +++ b/Practicum/pract07/Traversals.cpp @@ -0,0 +1,98 @@ +#include +#include +#include + +template +struct TreeNode { + T data; + TreeNode* left; + TreeNode* right; + + TreeNode(const T& val) : data(val), left(nullptr), right(nullptr) {} +}; + +// Preorder обхождане (корен, ляво, дясно) +template +void preorderTraversal(TreeNode* root) { + if (!root) return; + std::cout << root->data << " "; + preorderTraversal(root->left); + preorderTraversal(root->right); +} + +// Inorder обхождане (ляво, корен, дясно) +template +void inorderTraversal(TreeNode* root) { + if (!root) return; + inorderTraversal(root->left); + std::cout << root->data << " "; + inorderTraversal(root->right); +} + +// Postorder обхождане (ляво, дясно, корен) +template +void postorderTraversal(TreeNode* root) { + if (!root) return; + postorderTraversal(root->left); + postorderTraversal(root->right); + std::cout << root->data << " "; +} + +// Обхождане в широчина +template +void bfs(TreeNode* root) { + if (!root) return; + + std::queue*> q; + q.push(root); + + while (!q.empty()) { + TreeNode* current = q.front(); + q.pop(); + + std::cout << current->data << " "; + + if (current->left) q.push(current->left); + if (current->right) q.push(current->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 + + // Preorder обхождане + std::cout << "Preorder traversal: "; + preorderTraversal(root); // 1 2 4 5 3 6 7 + std::cout << std::endl; + + // Inorder обхождане + std::cout << "Inorder traversal: "; + inorderTraversal(root); // 4 2 5 1 6 3 7 + std::cout << std::endl; + + // Postorder обхождане + std::cout << "Postorder traversal: "; + postorderTraversal(root); // 4 5 2 6 7 3 1 + std::cout << std::endl; + + // Обхождане в широчина + std::cout << "BFS traversal: "; + bfs(root); // 1 2 3 4 5 6 7 + std::cout << std::endl; + + return 0; +} -- cgit v1.3.1-23-gd82d