এই টিউটোরিয়ালে, আমরা একটি বাইনারি ট্রিতে দুটি দেওয়া লেভেল নম্বরের মধ্যবর্তী নোড প্রিন্ট করার একটি প্রোগ্রাম নিয়ে আলোচনা করব।
এখানে, আমাদের একটি বাইনারি ট্রির জন্য একটি নিম্ন লেভেল (low level) এবং একটি উচ্চ লেভেল (high level) দেওয়া থাকবে এবং আমাদের দেওয়া লেভেলগুলোর মধ্যবর্তী সব এলিমেন্ট প্রিন্ট করতে হবে।
সমাধানের পদ্ধতি
এটি সমাধান করতে আমরা কিউ-ভিত্তিক লেভেল ট্রাভার্সাল (queue-based level traversal) ব্যবহার করতে পারি। ইনঅর্ডার ট্রাভার্সালের সময় আমরা প্রতিটি লেভেলের শেষে একটি মার্কিং নোড রাখতে পারি। তারপর আমরা প্রতিটি লেভেলে যেতে পারি এবং যদি মার্কিং নোড দেওয়া লেভেলগুলির মধ্যস্থ থাকলে তার নোডগুলি প্রিন্ট করতে পারি।
উদাহরণ কোড
#include <iostream>
#include <queue>
using namespace std;
struct Node {
int data;
struct Node *left, *right;
};
// লেভেলের মধ্যবর্তী নোড প্রিন্ট করার ফাংশন
void print_nodes(Node* root, int low, int high) {
queue <Node *> Q;
// মার্কিং নোড তৈরি
Node *marker = new Node;
int level = 1;
Q.push(root);
Q.push(marker);
while (Q.empty() == false) {
Node *n = Q.front();
Q.pop();
// লেভেলের শেষ চেক করা
if (n == marker) {
cout << endl;
level++;
if (Q.empty() == true || level > high)
break;
Q.push(marker);
continue;
}
if (level >= low)
cout << n->data << " ";
if (n->left != NULL) Q.push(n->left);
if (n->right != NULL) Q.push(n->right);
}
}
Node* create_node(int data) {
Node* temp = new Node;
temp->data = data;
temp->left = temp->right = NULL;
return (temp);
}
int main() {
struct Node *root = create_node(20);
root->left = create_node(8);
root->right = create_node(22);
root->left->left = create_node(4);
root->left->right = create_node(12);
root->left->right->left = create_node(10);
root->left->right->right = create_node(14);
cout << "Elements between the given levels are :";
print_nodes(root, 2, 3);
return 0;
}
আউটপুট
Elements between the given levels are : 8 22 4 12