#include <queue>
#include <iostream>
using namespace std;
struct Node {
int data;
Node *left, *right;
explicit Node(int data) {
this->data = data;
left = right = nullptr;
}
};
void levelOrder(Node *root) {
// Base Case
if (!root)
return;
// Create an empty queue for level order tarversal
queue<Node *> q;
// Enqueue Root and initialize height
q.push(root);
while (!q.empty()) {
// Print front of queue and remove it from queue
root = q.front();
q.pop();
cout << root->data << " ";
// Enqueue left child
if (root->left)
q.push(root->left);
// Enqueue right child
if (root->right)
q.push(root->right);
}
}
int main() {
Node *root = new Node(1);
root->left = new Node(2);
root->right = new Node(3);
root->left->left = new Node(4);
root->left->right = new Node(5);
root->right->left = new Node(6);
root->right->right = new Node(7);
levelOrder(root);
return 0;
}