इस समस्या में, हमें एक बाइनरी ट्री दिया जाता है और हमें सभी नोड्स को उनके मूल्यों के क्रमबद्ध क्रम में एक स्तर पर प्रिंट करना होता है।
आइए अवधारणा को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं,
इनपुट -
आउटपुट -
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