কম্পিউটার

C++ ব্যবহার করে N-ary Tree-এ প্রদত্ত নোডের ভাইবোনের সংখ্যা খুঁজুন


এই নিবন্ধে, আমরা n-ary গাছে একটি প্রদত্ত নোডের ভাইবোনের সংখ্যা নির্ধারণের জন্য সম্পূর্ণ তথ্য প্রদান করব। ব্যবহারকারীর দেওয়া কী-এর মান দিয়ে আমাদের নোডের ভাইবোন খুঁজে বের করতে হবে; যদি এটি না হয়, তাহলে -1 হিসাবে আউটপুট করুন। শুধুমাত্র একটি পদ্ধতি আছে যা আমরা ব্যবহার করতে পারি −

সরল পদ্ধতি

এই পদ্ধতিতে, আমরা সমস্ত নোডের মধ্য দিয়ে যাব এবং একটি শিশুর ব্যবহারকারীর মতো একই মান আছে কিনা তা পরীক্ষা করব। যদি এটি বিদ্যমান থাকে, আমরা অনেক শিশুর উত্তর দিই - 1 (প্রদত্ত মান)।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Node {  // structure of nodes of our tree.
public:
    int key;
    vector<Node*> child;
    Node(int data){
        key = data;
    }
};
int main(){
   //     Building The Tree
    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, এবং তারপর আমরা একটি লুপের মধ্য দিয়ে বিরতি করি এখন আমরা পরীক্ষা করি যে পতাকাটি ট্রিগার হয়েছে কিনা। যদি এটি ট্রিগার হয়, তাহলে আমরা while লুপ থেকে বেরিয়ে আসি। এর পরে, আমরা এখন উত্তরটি প্রিন্ট করি যদি প্রদত্ত মান সহ একটি নোড না থাকে, তাহলে আমাদের উত্তর পরিবর্তনশীল পরিবর্তন হবে না এবং আউটপুট হবে -1। যদি রুট মানের প্রদত্ত হিসাবে একই মান থাকে, তাহলে একটি if স্টেটমেন্ট আছে যা এটি পরীক্ষা করে এবং আমাদের প্রোগ্রাম চালায়।

উপসংহার

এই নিবন্ধে, আমরা n-ary গাছে একটি প্রদত্ত নোডের ভাইবোনের সংখ্যা খুঁজে বের করার জন্য একটি সমস্যার সমাধান করি। O(N) সময়ের জটিলতায়। এছাড়াও আমরা এই সমস্যার জন্য C++ প্রোগ্রাম শিখেছি এবং সম্পূর্ণ পদ্ধতির মাধ্যমে আমরা এই সমস্যার সমাধান করেছি। আমরা অন্যান্য ভাষায় যেমন সি, জাভা, পাইথন এবং অন্যান্য ভাষায় একই প্রোগ্রাম লিখতে পারি।


  1. C++ ব্যবহার করে একটি N-ary ট্রি অতিক্রম করার উপায়ের সংখ্যা খুঁজুন

  2. C++ ব্যবহার করে স্টপিং স্টেশনের সংখ্যা খুঁজুন

  3. C++ ব্যবহার করে প্রদত্ত বিন্দু থেকে সম্ভাব্য চতুর্ভুজের সংখ্যা নির্ণয় করুন

  4. C++ এ বাইনারি ট্রিতে প্রদত্ত নোডের আয়না খুঁজুন