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

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


আমাদের একটি বাইনারি সার্চ ট্রি (BST) এবং একটি রেঞ্জ [low, high] দেওয়া আছে। কাজ হল BST-এ সেই রেঞ্জের মধ্যে পড়া নোডের সংখ্যা গণনা করা।

BST-এ বাম সাবট্রির সব নোডের মান পেরেন্ট নোডের মানের চেয়ে ছোট বা সমান, এবং ডান সাবট্রির সব নোডের মান পেরেন্টের চেয়ে বড় হয়।

উদাহরণ:

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

রেঞ্জ: [11, 40] → আউটপুট: count is: 5 (নোড: 14, 19, 27, 31, 35)

অ্যালগরিদম

  • যদি root == NULL হয় তবে ০ রিটার্ন করুন

  • যদি root->data == low && root->data == high হয় তবে ১ রিটার্ন করুন

  • যদি root->data রেঞ্জের মধ্যে পড়ে (low <= data <= high): ১ + left subtree-এ কল + right subtree-এ কল

  • যদি root->data < low: শুধু right subtree-এ কল করুন

  • যদি root->data > high: শুধু left subtree-এ কল করুন

প্রোগ্রাম

#include <iostream> 
using namespace std; 

struct node { 
    int data; 
    struct node* left, *right; 
}; 

node* newNode(int data) { 
    node* temp = new node; 
    temp->data = data; 
    temp->left = temp->right = NULL; 
    return temp; 
} 

int findcount(node* root, int low, int high) { 
    if (!root) return 0; 
    if (root->data == high && root->data == low) return 1; 
    if (root->data <= high && root->data >= low) 
        return 1 + findcount(root->left, low, high) + findcount(root->right, low, high); 
    else if (root->data < low) 
        return findcount(root->right, low, high); 
    else 
        return findcount(root->left, low, high); 
} 

int main() { 
    node* root = newNode(27); 
    root->left = newNode(14); 
    root->right = newNode(35); 
    root->left->left = newNode(10); 
    root->left->right = newNode(19); 
    root->right->left = newNode(31); 
    root->right->right = newNode(42); 
    int low = 10, high = 50; 
    cout << "Count of nodes between [" << low << ", " << high << "] is " << findcount(root, low, high); 
    return 0; 
}

আউটপুট

Count of nodes between [10, 50] is 7
  1. C++-এ BST-এ দিয়ে রেঞ্জের কী প্রিন্ট করুন O(1) স্পেসে

  2. বাইনারি ট্রিতে ২-এর ঘাত বিশিষ্ট ওজন সম্পন্ন নোড গণনা C++-এ

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

  4. দেওয়া রেঞ্জে ভিন্ন জোড়া (x, y) খুঁজে বের করা যাতে x, y কে ভাগ করত পারে C++-এ