কম্পিউটার

C++ এ n-ary গাছের প্রতিটি নোডের সাবট্রিতে পাতার নোডের সংখ্যা


এই টিউটোরিয়ালে, আমরা একটি প্রোগ্রাম লিখতে যাচ্ছি যা n-ary গাছের প্রতিটি নোডের জন্য পাতার নোডের সংখ্যা খুঁজে বের করে।

একটি এন-আরি গাছ দেওয়া হলে, আমাদের প্রতিটি সাবট্রির জন্য পাতার নোডের সংখ্যা খুঁজে বের করতে হবে। আসুন একটি উদাহরণ দেখি।

ইনপুট

N = 8
tree = [[2, 3], [], [4, 5, 6], [7, 8], [], [], [], []]

আউটপুট

1->5 2->1 3->4 4->2 5->1 6->1 7->1 8->1

অ্যালগরিদম

  • আপনার পছন্দের গাছ দিয়ে এন-আরি ট্রি শুরু করুন।

  • গাছের মধ্য দিয়ে যেতে ডিএফএস ব্যবহার করুন।

  • প্রতিটি নোড লিফ নোডের গণনার গণনা সংরক্ষণ করার জন্য একটি অ্যারে বজায় রাখুন।

  • DFS-এ রিকার্সিভ কলের পরে লিফ নোডের সংখ্যা বৃদ্ধি করুন।

  • লিফ নোড গণনা সহ সমস্ত নোড প্রিন্ট করুন৷

বাস্তবায়ন

C++

-এ উপরের অ্যালগরিদমের বাস্তবায়ন নিচে দেওয়া হল
#include <bits/stdc++.h>
using namespace std;
void insertNode(int x, int y, vector<int> tree[]) {
   tree[x].push_back(y);
}
void DFS(int node, int leaf[], int visited[], vector<int> tree[]) {
   leaf[node] = 0;
   visited[node] = 1;
   for (auto it : tree[node]) {
      if (!visited[it]) {
         DFS(it, leaf, visited, tree);
         leaf[node] += leaf[it];
      }
   }
   if (!tree[node].size()) {
      leaf[node] = 1;
   }
}
int main() {
   int N = 8;
   vector<int> tree[N + 1];
   insertNode(1, 2, tree);
   insertNode(1, 3, tree);
   insertNode(3, 4, tree);
   insertNode(3, 5, tree);
   insertNode(3, 6, tree);
   insertNode(4, 7, tree);
   insertNode(4, 8, tree);
   int leaf[N + 1];
   int visited[N + 1];
   for (int i = 0; i <= N; i++) {
      visited[i] = 0;
   }
   DFS(1, leaf, visited, tree);
   for (int i = 1; i <= N; i++) {
      cout << i << "->" << leaf[i] << endl;
   }
   return 0;
}

আউটপুট

আপনি যদি উপরের কোডটি চালান, তাহলে আপনি নিম্নলিখিত ফলাফল পাবেন।

1->5
2->1
3->4
4->2
5->1
6->1
7->1
8->1

  1. C++ এ DFS ব্যবহার করে একটি n-ary গাছের সমস্ত পাতার নোড প্রিন্ট করুন

  2. C++ এ একটি বাইনারি গাছের নিকটতম পাতাটি খুঁজুন

  3. C++ ব্যবহার করে একটি গাছের বিজোড় স্তরে নোডগুলি প্রিন্ট করার জন্য প্রোগ্রাম

  4. বাইনারি গাছের নোডগুলি প্রিন্ট করুন যেহেতু তারা C++ প্রোগ্রামিং-এ লিফ নোড হয়ে যায়।