Website Summary Files Commits Branches @commit @diff @stats
path: root / Practicum / pract07 / Traversals.cpp
diff options
context:
space:
mode:
Commitc516610609be1e62628badbe4fc25f5775275be2 (patch)
Author
 Desislava Shunina <115353472+desiish@users.noreply.github.com>
2024-11-19 17:40:15 +0200
Committer
 GitHub <noreply@github.com>
2024-11-19 17:40:15 +0200
Files6fcc21e5c55ba0dd6d5e61dd4dc41f28f07ddbee /Practicum/pract07/Traversals.cpp
Data-structures-and-algorithms-c516610609be1e62628badbe4fc25f5775275be2.tar
Data-structures-and-algorithms-c516610609be1e62628badbe4fc25f5775275be2.tar.gz
Data-structures-and-algorithms-c516610609be1e62628badbe4fc25f5775275be2.zip
Parentf03828c4005104130f5e6e5680d0a54843316fef (diff)
add gifs and example function
1 files changed, 98 insertions, 0 deletions
-rw-r--r--Practicum/pract07/Traversals.cpp98
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 <iostream>
+#include <queue>
+#include <algorithm>
+
+template <typename T>
+struct TreeNode {
+ T data;
+ TreeNode* left;
+ TreeNode* right;
+
+ TreeNode(const T& val) : data(val), left(nullptr), right(nullptr) {}
+};
+
+// Preorder обхождане (корен, ляво, дясно)
+template <typename T>
+void preorderTraversal(TreeNode<T>* root) {
+ if (!root) return;
+ std::cout << root->data << " ";
+ preorderTraversal(root->left);
+ preorderTraversal(root->right);
+}
+
+// Inorder обхождане (ляво, корен, дясно)
+template <typename T>
+void inorderTraversal(TreeNode<T>* root) {
+ if (!root) return;
+ inorderTraversal(root->left);
+ std::cout << root->data << " ";
+ inorderTraversal(root->right);
+}
+
+// Postorder обхождане (ляво, дясно, корен)
+template <typename T>
+void postorderTraversal(TreeNode<T>* root) {
+ if (!root) return;
+ postorderTraversal(root->left);
+ postorderTraversal(root->right);
+ std::cout << root->data << " ";
+}
+
+// Обхождане в широчина
+template <typename T>
+void bfs(TreeNode<T>* root) {
+ if (!root) return;
+
+ std::queue<TreeNode<T>*> q;
+ q.push(root);
+
+ while (!q.empty()) {
+ TreeNode<T>* 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<int>* root = new TreeNode<int>(1);
+ root->left = new TreeNode<int>(2);
+ root->right = new TreeNode<int>(3);
+ root->left->left = new TreeNode<int>(4);
+ root->left->right = new TreeNode<int>(5);
+ root->right->left = new TreeNode<int>(6);
+ root->right->right = new TreeNode<int>(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;
+}