একটি n-ary ট্রি (প্রতিটি নোডে n সংখ্যক চাইল্ড হতে পারে) এবং একটি সংখ্যা x দেওয়া থাকলে, ট্রিতে x চেয়ে বড় সবচেয়ে ছোট উপাদান বের করতে হবে।
অ্যালগরিদম
- n-ary ট্রি তৈরি করুন।
- রিকার্সিভ ফাংশন লিখুন যা প্রতিটি নোড ভিজিট করবে।
- যদি নোডের ভ্যালু
xচেয়ে বড় হয় এবং (রেজাল্ট খালি হয় অথবা নোডের ভ্যালু রেজাল্ট চেয়ে ছোট), তবে রেজাল্ট আপডেট করুন। - সকল চাইল্ডের জন্য রিকার্সিভ কল দিন।
সি++ ইমপ্লিমেন্টেশন
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
vector child;
};
Node* newNode(int data) {
Node* node = new Node;
node->data = data;
return node;
}
void findNextGreaterElement(Node* root, int x, Node** result) {
if (!root) return;
if (root->data > x) {
if (!*result || (*result)->data > root->data) *result = root;
}
for (Node* child : root->child) {
findNextGreaterElement(child, x, result);
}
}
int main() {
Node* root = newNode(10);
root->child.push_back(newNode(12));
root->child.push_back(newNode(23));
root->child.push_back(newNode(45));
root->child[0]->child.push_back(newNode(40));
root->child[1]->child.push_back(newNode(33));
root->child[2]->child.push_back(newNode(12));
Node* result = nullptr;
findNextGreaterElement(root, 20, &result);
cout << result->data << endl; // 23
return 0;
}
আউটপুট
23