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

C++-এ ট্রি নোড মুছে ফেলা


মনে করুন একটি ট্রি আছে, এই ট্রি নোড 0-তে রুটেড, এটি নিচের মোতাবিক দেওয়া হয় -

  1. নোডের সংখ্যা `nodes`
  2. `i`-তম নোডের মান `value[i]`
  3. `i`-তম নোডের পেরেন্ট `parent[i]`

আমাদের যেসব সাবট্রির নোডগুলোর মানগুলোর যোগফল ০, সেগুলো মুছে ফেলতে হবে, তারপর ট্রিতে অবশিষ্ট নোডের সংখ্যা রিটার্ন করতে হবে। যদি ট্রি নিচের মোতাবিক হয় -

C++-এ ট্রি নোড মুছে ফেলা

৭টি নোড আছে, আউটপুট হবে ২।

এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব -

  • `children` নামক একটি ম্যাপ তৈরি করুন
  • `dfs()` নামক একটি মেথড সংজ্ঞায়িত করুন, এটি `node`, `value` অ্যারে এবং `graph` নেবে
  • `temp :=` একটি পেয়ার (`value[node]`, 1)
  • `i` = 0 থেকে `graph[node]`-এর আকার পর্যন্ত
    • `temp2 := dfs(graph[node][i], value, graph)`
    • ফাস্টকে `temp2`-এর ফাস্ট দিয়ে বাড়ান, সেকেন্ডকে `temp2`-এর সেকেন্ড দিয়ে বাড়ান
  • যদি `temp`-এর ফাস্ট 0 হয়, তবে `ans := ans - temp`-এর সেকেন্ড, `temp`-এর সেকেন্ড := 0 সেট করুন
  • `temp` রিটার্ন করুন
  • মেইন মেথড থেকে, এটি `nodes`, `parents` অ্যারে এবং `values` অ্যারে নেবে
  • `n` := `values` অ্যারেতে উপস্থিত ভ্যালুর সংখ্যা
  • `ans := n`
  • `graph` নামক একটি অ্যারে আকার `n + 1` সংজ্ঞায়িত করুন
  • `i` = 1 থেকে `n-1` পর্যন্ত
    • `i`-কে `graph[parent[i]]`-এ ইনসার্ট করুন
  • `dfs(0, value, graph)` কল করুন
  • `ans` রিটার্ন করুন

উদাহরণ (C++)

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন -

#include <bits/stdc++.h> using namespace std; class Solution { public:    map <int, int> children;    int ans;    pair <int, int> dfs(int node, vector<int>& value, vector <int> graph[]){       pair <int, int> temp = {value[node], 1};       for(int i = 0; i < graph[node].size(); i++){          pair <int, int> temp2 = dfs(graph[node][i], value, graph);          temp.first += temp2.first;          temp.second += temp2.second;       }       if(temp.first == 0){          ans -= temp.second;          temp.second = 0;       }       return temp;    }    int deleteTreeNodes(int nodes, vector<int>& parent, vector<int>& value) {       int n = value.size();       ans = n;       children.clear();       vector < int > graph[n + 1];       for(int i = 1; i < n; i++){          graph[parent[i]].push_back(i);       }       dfs(0, value, graph);       return ans;    } }; main(){    vector<int> v1 = {-1,0,0,1,2,2,2};    vector<int> v2 = {1,-2,4,0,-2,-1,-1};    Solution ob;    cout << (ob.deleteTreeNodes(7,v1, v2)); }

ইনপুট

7 [-1,0,0,1,2,2,2] [1,-2,4,0,-2,-1,-1]

আউটপুট

2

  1. C++-এ BK ট্রি পরিচিতি

  2. C++-এ বাইনারি ট্রি নোডস ভ্যালিডেট করা

  3. C++-এ ট্রি ডায়ামিটার

  4. C++-এ সম্পূর্ণ বাইনারি ট্রির নোড গণনা (Count Complete Tree Nodes)