ধরুন আমাদের একটি বাইনারি গাছ আছে। লেভেল অর্ডার ট্রাভার্সাল স্কিম ব্যবহার করে আমাদের এই গাছটি অতিক্রম করতে হবে। তাই যদি গাছের মত হয়
ট্রাভার্সাল সিকোয়েন্স হবে − [10, 5, 16, 8, 15, 20, 23]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- নোড সঞ্চয় করার জন্য কিউ কিউ সংজ্ঞায়িত করুন
- ক্যুতে রুট ঢোকান।
- যখন que খালি না, do
- আইটেম :=সারির সামনের অবস্থানে উপস্থিত আইটেম
- আইটেমের মান প্রিন্ট করুন
- যদি আইটেমের বাম অংশটি শূন্য না হয়, তাহলে আইটেমের বাম অংশটি que এ সন্নিবেশ করুন
- যদি আইটেমের ডানদিকে শূন্য না হয়, তাহলে আইটেমের ডানদিকে que এ সন্নিবেশ করুন
- que থেকে সামনের উপাদান মুছুন
উদাহরণ(C++)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
#include<iostream> #include<queue> using namespace std; class node{ public: int h_left, h_right, bf, value; node *left, *right; }; class tree{ private: node *get_node(int key); public: node *root; tree(){ root = NULL; //set root as NULL at the beginning } void levelorder_traversal(node *r); node *insert_node(node *root, int key); }; node *tree::get_node(int key){ node *new_node; new_node = new node; //create a new node dynamically new_node->h_left = 0; new_node->h_right = 0; new_node->bf = 0; new_node->value = key; //store the value from given key new_node->left = NULL; new_node->right = NULL; return new_node; } void tree::levelorder_traversal(node *root){ queue <node*> que; node *item; que.push(root); //insert the root at first while(!que.empty()){ item = que.front(); //get the element from the front end cout << item->value << " "; if(item->left != NULL) //When left child is present, insert into queue que.push(item->left); if(item->right != NULL) //When right child is present, insert into queue que.push(item->right); que.pop(); //remove the item from queue } } node *tree::insert_node(node *root, int key){ if(root == NULL){ return (get_node(key)); //when tree is empty, create a node as root } if(key < root->value){ //when key is smaller than root value, go to the left root->left = insert_node(root->left, key); } else if(key > root->value){ //when key is greater than root value, go to the right root->right = insert_node(root->right, key); } return root; //when key is already present, do not insert it again } main(){ node *root; tree my_tree; //Insert some keys into the tree. my_tree.root = my_tree.insert_node(my_tree.root, 10); my_tree.root = my_tree.insert_node(my_tree.root, 5); my_tree.root = my_tree.insert_node(my_tree.root, 16); my_tree.root = my_tree.insert_node(my_tree.root, 20); my_tree.root = my_tree.insert_node(my_tree.root, 15); my_tree.root = my_tree.insert_node(my_tree.root, 8); my_tree.root = my_tree.insert_node(my_tree.root, 23); cout << "Level-Order Traversal: "; my_tree.levelorder_traversal(my_tree.root); }
ইনপুট
[10,5,16,null,8,15,20,null,null,null,null,null,null,null,23]
আউটপুট
Level-Order Traversal: 10 5 16 8 15 20 23