এই সমস্যায়, আমাদের একটি বাইনারি ট্রি দেওয়া হয়েছে এবং আমাদের সমস্ত নোডকে তাদের মান অনুসারে সাজানো ক্রমে একটি স্তরে প্রিন্ট করতে হবে৷
ধারণাটি আরও ভালভাবে বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট −
আউটপুট৷ −
20 6 15 2 17 32 78
এই সমস্যা সমাধানের জন্য, আমাদের গাছের প্রতিটি স্তরের একটি সাজানো অর্ডার প্রিন্ট করতে হবে। এর জন্য, আমাদের একটি সারি এবং দুটি অগ্রাধিকার সারি তৈরি করতে হবে। NULL বিভাজক দুটি স্তর আলাদা করতে ব্যবহৃত হয়।
উদাহরণ
যুক্তি ব্যাখ্যা করার জন্য প্রোগ্রাম -
#include <iostream> #include <queue> #include <vector> using namespace std; struct Node { int data; struct Node *left, *right; }; void printLevelElements(Node* root){ if (root == NULL) return; queue<Node*> q; priority_queue<int, vector<int>, greater<int> > current_level; priority_queue<int, vector<int>, greater<int> > next_level; q.push(root); q.push(NULL); current_level.push(root->data); while (q.empty() == false) { int data = current_level.top(); Node* node = q.front(); if (node == NULL) { q.pop(); if (q.empty()) break; q.push(NULL); cout << "\n"; current_level.swap(next_level); continue; } cout << data << " "; q.pop(); current_level.pop(); if (node->left != NULL) { q.push(node->left); next_level.push(node->left->data); } if (node->right != NULL) { q.push(node->right); next_level.push(node->right->data); } } } Node* insertNode(int data){ Node* temp = new Node; temp->data = data; temp->left = temp->right = NULL; return temp; } int main(){ Node* root = insertNode(12); root->left = insertNode(98); root->right = insertNode(34); root->left->left = insertNode(76); root->left->right = insertNode(5); root->right->left = insertNode(12); root->right->right = insertNode(45); cout << "Elements at each Level of binary tree are \n"; printLevelElements(root); return 0; }
আউটপুট
Elements at each Level of binary tree are 12 34 98 5 12 45 76