diff --git a/trees/README.md b/trees/README.md index 49a1f944..88fa780e 100644 --- a/trees/README.md +++ b/trees/README.md @@ -3,3 +3,4 @@ ### C or C++ 1. [Pre, In & Post Order Traversals](c-or-cpp/pre-in-post-traversal.cpp) +2. [Level Order Traversal](c-or-cpp/level-order-traversal.cpp) diff --git a/trees/c-or-cpp/level-order-traversal.cpp b/trees/c-or-cpp/level-order-traversal.cpp new file mode 100644 index 00000000..6dbed08a --- /dev/null +++ b/trees/c-or-cpp/level-order-traversal.cpp @@ -0,0 +1,74 @@ +#include +#include +#define endl "\n" +using namespace std; + + +// Basic Structure of a Tree +struct Node{ + int data; + struct Node *left; + struct Node *right; + + Node(int val){ + data = val; + left = NULL; + right = NULL; + } +}; + +/* Level order Traversal of a Binary Tree using Queue */ +/* Complexity : O(n) */ + +// Here NULLs are used to keep track of levels + +void level_order(Node* root){ + if(root == NULL) + return; + + queue q; + q.push(root); q.push(NULL); + + while(!q.empty()){ + Node* node = q.front(); + q.pop(); + + if(node != NULL){ + cout<data<<" "; + if(node->left) + q.push(node->left); + + if(node->right) + q.push(node->right); + + }else if(!q.empty()){ + q.push(NULL); + } + } + cout<left = new Node(2); + root->right = new Node(3); + root->left->left = new Node(4); + root->left->right = new Node(5); + root->right->right = new Node(7); + + /* + 1 + / \ + 2 3 + / \ \ + 4 5 7 + Expected-> level-order : 1,2,3,4,5,7 + + + */ + cout<<"Level Order is : "; + level_order(root); + + return 0; +} \ No newline at end of file