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

C++-এ BST সাবট্রি গণনা যারা দেওয়া রেঞ্জে পড়ে

আমাদের একটি বাইনারি সার্চ ট্রি (BST) ইনপুট হিসেবে দেওয়া আছে। লক্ষ্য হলো সেই BST-তে কতগুলো সাবট্রি আছে যাদের সব নোডের ভ্যালু দেওয়া রেঞ্জ (start এবং end)-এর মধ্যে পড়ে। যদি start=5 এবং end=50 হয়, তবে যেসব সাবট্রির সকল নোডের ওয়েট ৫ থেকে ৫০-এর মধ্যে থাকে, তাদের কাউন্ট করা।

ইনপুট

ট্রি (চিত্রে দেখানো) - রেঞ্জ [3-6]

আউটপুট: রেঞ্জে পড়া ট্রির কাউন্ট - 2

ব্যাখ্যা: নোড ৪ এবং ৬ এর জন্য। তাদের সাবট্রি (NULL) ৩-৬ রেঞ্জের মধ্যে পড়ে।

ইনপুট

ট্রি (চিত্রে দেখানো) - রেঞ্জ [12-20]

আউটপুট: রেঞ্জে পড়া ট্রির কাউন্ট - 3

ব্যাখ্যা: নোড ১৬, ১৪ এবং ২০ এর জন্য। তাদের সাবট্রি ১২-২০ রেঞ্জের মধ্যে পড়ে।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • Btreenode স্ট্রাকচার দিয়ে ট্রি নোড তৈরি করা (info পর্ব ইন্টিজার, লেফট এবং রাইট পয়েন্টার)।
  • insert(int data) ফাংশন দিয়ে ডেটা সহ নোড তৈরি করা (লেফট/রাইট NULL)।
  • insert ফাংশন কল করে BST তৈরি করা (রুটের লেফট/রাইটে নোড যোগ করা)।
  • l এবং h ভেরিয়েবলে রেঞ্জের মিনিমাম এবং ম্যাক্সিমাম ভ্যালু স্টোর করা।
  • count ভেরিয়েবল ০ দিয়ে ইনিশিয়ালাইজ করা।
  • getBtreeCount(Btreenode* root, int low, int high, int* count) ফাংশন রিকার্সিভলি কল করে প্রতিটি নোডের লেফট ও রাইট সাবট্রি চেক করা।
  • যদি রুট NULL হয় তবে ১ রিটার্ন (ট্রির অংশ নয়)।
  • যদি লেফট ও রাইট সাবট্রি রেঞ্জের মধ্যে থাকে এবং করেন্ট নোডও রেঞ্জের মধ্যে থাকে, তবে কাউন্ট বাড়ানো এবং ১ রিটার্ন।
  • শেষে count-এ আপডেটেড ভ্যালু থাকবে।
  • ফলাফল প্রিন্ট করা।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

struct Btreenode {
    int info;
    Btreenode *left, *right;
};

int getBtreeCount(Btreenode* root, int low, int high, int* count){
    if (root == NULL)
        return 1;
    int left = getBtreeCount(root->left, low, high, count);
    int right = getBtreeCount(root->right, low, high, count);
    if (left && right && root->info >= low && root->info <= high) {
        ++*count;
        return 1;
    }
    return 0;
}

Btreenode* insert(int data){
    Btreenode* temp = new Btreenode;
    temp->info = data;
    temp->left = temp->right = NULL;
    return (temp);
}

int main(){
    Btreenode* root = insert(50);
    root->left = insert(30);
    root->right = insert(70);
    root->left->left = insert(20);
    root->left->right= insert(40);
    root->right->left = insert(60);
    root->right->right = insert(80);
    int l = 10;
    int h = 50;
    int count=0;
    getBtreeCount(root, l, h, &count);
    cout << "Count of subtrees lying in range: " << count;
    return 0;
}

আউটপুট

Count of subtrees lying in range: 3
  1. স্ট্রিংয়ের নির্দিষ্ট ইনডেক্স রেঞ্জে প্যালিনড্রোমিক সাবস্ট্রিং সংখ্যা (C++)

  2. C++-এ BST-এ দিয়ে রেঞ্জের কী প্রিন্ট করুন O(1) স্পেসে

  3. C++-এ ইউনিভ্যালু সাবট্রি গণনা

  4. C++-এ BST-এ দিয়ে যাওয়া রেঞ্জে (Range) পড়া নোডের সংখ্যা গণনা