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

C++-এ BST-এ দুটি নোডের মধ্যে সর্বোচ্চ উপাদান

সমস্যা বিবরণ

N উপাদানের একটি অ্যারে এবং দুটি ইন্টিজার A, B দেওয়া আছে যা প্রদত্ত অ্যারেতেอยู่। arr[0] থেকে arr[n-1] পর্যন্ত উপাদান ইনসার্ট করে একটি বাইনারি সার্চ ট্রি তৈরি করুন। কাজ হল A থেকে B পর্যন্ত পথে সর্বোচ্চ উপাদান খুঁজে বের করা।

উদাহরণ

যদি অ্যারে হয় {24, 23, 15, 36, 19, 41, 25, 35} তবে আমরা নিচের মতো BST তৈরি করতে পারি:

C++-এ BST-এ দুটি নোডের মধ্যে সর্বোচ্চ উপাদান

যদি আমরা A = 19 এবং B = 41 ধরি তবে এই দুটি নোডের মধ্যে সর্বোচ্চ উপাদান হল 41।

অ্যালগরিদম

  • নোড A এবং B-এর নিম্নতম কমন 앤সেস্টর (LCA) খুঁজে বের করুন।
  • LCA এবং A-এর মধ্যে সর্বোচ্চ নোড খুঁজে বের করুন। এটাকে max1 বলুন।
  • LCA এবং B-এর মধ্যে সর্বোচ্চ নোড খুঁজে বের করুন। এটাকে max2 বলুন।
  • max1 এবং max2-এর মধ্যে সর্বোচ্চ মান রিটার্ন করুন।

উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 
struct node { 
    int data; 
    struct node* left; 
    struct node* right; 
}; 
node* createNode(int x) { 
    node* p = new node(); 
    p->data = x; 
    p->left = NULL; 
    p->right = NULL; 
    return p; 
} 
void insertNode(struct node* root, int x) { 
    node *p = root, *q = NULL; 
    while (p != NULL) { 
        q = p; 
        if (p->data < x) { 
            p = p->right; 
        } else { 
            p = p->left; 
        } 
    } 
    if (q == NULL) { 
        p = createNode(x); 
    } else { 
        if (q->data < x) { 
            q->right = createNode(x); 
        } else { 
            q->left = createNode(x); 
        } 
    } 
} 
int maxelpath(node* q, int x) { 
    node* p = q; 
    int mx = INT_MIN; 
    while (p->data != x) { 
        if (p->data > x) { 
            mx = max(mx, p->data); 
            p = p->left; 
        } else { 
            mx = max(mx, p->data); 
            p = p->right; 
        } 
    } 
    return max(mx, x); 
} 
int getMaximumElement(struct node* root, int x, int y) { 
    node* p = root; 
    while ((x < p->data && y < p->data) || (x > p->data && y > p->data)) { 
        if (x < p->data && y < p->data) { 
            p = p->left; 
        } else if (x > p->data && y > p->data) { 
            p = p->right; 
        } 
    } 
    return max(maxelpath(p, x), maxelpath(p, y)); 
} 
int main() { 
    int arr[] = {24, 23, 15, 36, 19, 41, 25, 35}; 
    int a = 19, b = 41; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    struct node* root = createNode(arr[0]); 
    for (int i = 1; i < n; i++) insertNode(root, arr[i]); 
    cout << "Maximum element = " << getMaximumElement(root, a, b) << endl; 
    return 0; 
}

আউটপুট

Maximum element = 41
  1. C++-এ বাইনারি ট্রিতে যেকোনো দুটি নোডের পথের XOR

  2. C++-এ বাইনারি ট্রিতে দুটি লেভেলের মাঝপথে সব নোড প্রিন্ট করা

  3. বাইনারি ট্রির দুটি নোডের মধ্যকার দূরত্ব বের করা C++-তে

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