এই আর্টিকেলে আমরা N-ary Tree-এ দেওয়া নোডের সিবলিং সংখ্যা বের করার সম্পূর্ণ তথ্য দিব। ইউজার দেওয়া key মান সহ নোডের সিবলিং বের করতে হবে; যদি না থাকে তবে আউটপুট -1। এখানে শুধু একটি পদ্ধতি আছে:
সহজ পদ্ধতি
এই পদ্ধতিতে আমরা সকল নোড traverser করব এবং চেক করব কোনো চাইল্ডের মান ইউজার দেওয়া মানের সমান কিনা। যদি থাকে তবে উত্তর হবে চাইল্ড সংখ্যা - 1 (দেওয়া মান)।
উদাহরণ
#include <bits/stdc++.h> using namespace std; class Node { // ট্রির নোড স্ট্রাকচার public: int key; vector<Node*> child; Node(int data){ key = data; } }; int main(){ // ট্রি বিল্ড করা Node* Base = new Node(50); (Base->child).push_back(new Node(2)); (Base->child).push_back(new Node(30)); (Base->child).push_back(new Node(14)); (Base->child).push_back(new Node(60)); (Base->child[0]->child).push_back(new Node(15)); (Base->child[0]->child).push_back(new Node(25)); (Base->child[0]->child[1]->child).push_back(new Node(70)); (Base->child[0]->child[1]->child).push_back(new Node(100)); (Base->child[1]->child).push_back(new Node(6)); (Base->child[1]->child).push_back(new Node(1)); (Base->child[2]->child).push_back(new Node(7)); (Base->child[2]->child[0]->child).push_back(new Node(17)); (Base->child[2]->child[0]->child).push_back(new Node(99)); (Base->child[2]->child[0]->child).push_back(new Node(27)); (Base->child[3]->child).push_back(new Node(16)); int x = 30; queue<Node*> q; q.push(Base); bool flag = 0; int answer = -1; if(Base -> key != x){ while(!q.empty()){ auto parent = q.front(); q.pop(); for(int i = 0; i < parent -> child.size(); i++){ if(parent -> child[i] -> key == x){ answer = parent -> child.size() - 1; flag = 1; break; } q.push(parent -> child[i]); } if(flag) break; } cout << answer << "\n"; } else cout << "0\n"; return 0; }
আউটপুট
3
উপরোক্ত প্রোগ্রামের ব্যাখ্যা
এই প্রোগ্রামে আমরা একটি কিউ মেইনটেইন করি যাতে অনুভিজিটেড নোড থাকে, এবং ভিজিটেড নোড পপ হবে। এখন যখন আমরা একটি নোড এক্সপ্লোর করি, তখন তার চাইল্ডগুলোর এক্সপ্লোর করি, এবং যদি চাইল্ডের মান x-এর সাথে মিলে যায়, তবে আমাদের ফ্ল্যাগ ট্রিগার হবে, এবং আউটপুট ভেরিয়েবলে child.size() - 1 মান এসাইন হবে, তারপর ফর লুপ ব্রেক করব। এখন চেক করব ফ্ল্যাগ ট্রিগার হয়েছে কিনা। হ্যাঁ হলে হয়েল লুপ থেকে বের হব। তারপর আউটপুট প্রিন্ট করব। যদি দেওয়া মান সহ নোড না থাকে, তবে আউটপুট ভেরিয়েবল পরিবর্তন হবে না, এবং আউটপুট হবে -1। যদি রুট ভ্যালু দেওয়া মানের সমান হয়, তবে একটি if স্টেটমেন্ট সেটি চেক করে প্রোগ্রাম রান করবে।
উপসংহার
এই আর্টিকেলে আমরা N-ary Tree-এ দেওয়া নোডের সিবলিং সংখ্যা O(N) সময় জটিলতায় বের করার সমস্যা সমাধান করেছি। আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং সমাধানের পূর্ণ পদ্ধতি শিখেছি। একই প্রোগ্রাম C, Java, Python বা অন্য ভাষায় লেখা যায়।