কম্পিউটার টিউটোরিয়াল

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

অ্যালগরিদম

  • n-ary ট্রি আডজেসেন্সি লিস্টে তৈরি করুন
  • DFS ট্রাভার্সাল করুন
  • leaf[] অ্যারে রাখুন প্রতিটি নোডের লিফ কাউন্ট
  • রিকার্সিভ কলের পর leaf[node] += leaf[child]
  • যদি চাইল্ড নেই, leaf[node] = ১
  • সব নোডের leaf কাউন্ট প্রিন্ট করুন

ইমপ্লিমেন্টেশন

#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++-এ n-এরি ট্রির সব লিফ নোড DFS দিয়ে প্রিন্ট করা

  2. বাইনারি ট্রিতে নিকটতম লিফ নোড খুঁজে বের করা (C++)

  3. সি++ প্রোগ্রাম: বাইনারি ট্রি (Binary Tree)-এর বিজোড় লেভেল (Odd Level)-এ থাকা নোডগুলো প্রিন্ট করা

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