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

C++-এ BST-এ দেওয়া সমষ্টির এক জোড়া বের করা

একটি বাইনারি সার্চ ট্রি (BST) এবং একটি টার্গেট সমষ্টি দেওয়া থাকলে, ট্রিতে যেকোনো একটি নোড জোড়া যাদের যোগফল টার্গেটের সমান সেটা বের করতে হবে।

পদ্ধতি

  • BST নোড ও ইনসার্ট ফাংশন তৈরি করুন।
  • দুই ভেক্টর দিয়ে ইন-অর্ডার ও রিভার্স ইন-অর্ডার ট্রাভার্সাল সিমুলেট করুন।
  • দুই পয়েন্টার টেকনিকের মতো বাম থেকে ছোট, ডান থেকে বড় মান তুলনা করুন।
  • যোগফল টার্গেটের সমান হলে জোড়া প্রিন্ট করে ব্রেক করুন।

উদাহরণ

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

struct Node { int data; Node *left, *right; Node(int d):data(d),left(NULL),right(NULL) {} };

Node* insert(Node* root, int data) {
    if (!root) return new Node(data);
    if (root->data < data) root->right = insert(root->right, data);
    else if (root->data > data) root->left = insert(root->left, data);
    return root;
}

void findPair(Node* root, int target) {
    vector L, R; Node *cL=root, *cR=root;
    while (cL || cR || (!L.empty() && !R.empty())) {
        while (cL) { L.push_back(cL); cL = cL->left; }
        while (cR) { R.push_back(cR); cR = cR->right; }
        Node* ln = L.back(); Node* rn = R.back();
        int lv = ln->data, rv = rn->data;
        if (lv >= rv) break;
        if (lv+rv < target) { L.pop_back(); cL = ln->right; }
        else if (lv+rv > target) { R.pop_back(); cR = rn->left; }
        else { cout << lv << " " << rv << endl; break; }
    }
}

int main() {
    Node* root = NULL;
    root = insert(root,25); root = insert(root,20); root = insert(root,30);
    root = insert(root,15); root = insert(root,21); root = insert(root,19);
    root = insert(root,31);
    findPair(root, 36);
    return 0;
}

আউটপুট

15 21
  1. C++-এ রুট থেকে লিফ পাথে রুটের ডেটার সমান যোগফলযুক্ত জোড়া আছে কিনা তা খুঁজুন

  2. ব্যালেন্সড BST-এ দেওয়া সমের সাথে একটি জোড়া খুঁজে বের করা C++-তে

  3. C++-এ দিয়ে गये GCD এবং LCM থেকে যেকোনো পেয়ার খুঁজে বের করা

  4. জাভা প্রোগ্রাম: बैलেন্সড BST-এ দেওয়া সমের একটি জোড়া (Pair) খুঁজে বের করা