#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; }