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

বাইনারি ট্রিয়ে সর্বোচ্চ BST সাবট্রি বের করা (C++)


সমস্যা বিবরণ

একটি বাইনারি ট্রি দেওয়া আছে। আমাদের কাজ হল ট্রিয়ে সর্বোচ্চ আকারের BST (Binary Search Tree) সাবট্রি বের করা।

উদাহরণ

ইনপুট ট্রি (চিত্র) — পুরো ট্রিই BST, আউটপুট: ৩ (নোড সংখ্যা)।

পদ্ধতি ১: ইন-অর্ডার ট্রাভার্সাল + BST চেক (O(n²))

প্রতিটি নোডের জন্য এর সাবট্রি কি BST তা চেক করে সর্বোচ্চ আকার বের করা।

পদ্ধতি ২: বটম-আপ ট্রাভার্সাল (O(n)) - অপ্টিমাইজড

নিচ থেকে উপরে ট্রাভার্সাল করে প্রতিটি নোডের জন্য মিন/ম্যাক্স ভ্যালু, BST স্ট্যাটাস, আকার ট্র্যাক করা।

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

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

int largestBST(Node* root) {
    int maxSize=0;
    function<tuple<bool,int,int,int>(Node*)> dfs = [&](Node* n) -> tuple<bool,int,int,int> {
        if(!n) return {true, INT_MAX, INT_MIN, 0};
        auto [lBST, lMin, lMax, lSize] = dfs(n->left);
        auto [rBST, rMin, rMax, rSize] = dfs(n->right);
        bool isBST = lBST && rBST && (n->data > lMax) && (n->data < rMin);
        int sz = isBST ? lSize + rSize + 1 : 0;
        maxSize = max(maxSize, sz);
        int mn = min(n->data, min(lMin, rMin));
        int mx = max(n->data, max(lMax, rMax));
        return {isBST, mn, mx, sz};
    };
    dfs(root);
    return maxSize;
}

আউটপুট

The Size of the largest BST is 5
  1. C++-এ পারফেক্ট বাইনারি ট্রি (Perfect Binary Tree) সকল নোডের যোগফল নির্ণয়

  2. পাইথনে বাইনারি ট্রি-তে BST-এর সর্বোচ্চ যোগফলের মান বের করার প্রোগ্রাম

  3. পাইথনে একটি বাইনারি ট্রিতে সবচেয়ে বড় কমপ্লিট সাবট্রি খুঁজুন

  4. পাইথনে বাইনারি ট্রি-র সর্বোচ্চ পারফেক্ট সাবট্রির আকার নির্ণয়