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

C++-এ বাইনারি ট্রিয়ের সর্বোচ্চ সাব-ট্রি যোগফল যাতে সাব-ট্রিটিও BST হয়

এই টিউটোরিয়ালে আমরা বাইনারি ট্রিয়ের সর্বোচ্চ সাব-ট্রি যোগফল বের করব যাতে সাব-ট্রিটিও একটি বাইনারি সার্চ ট্রি (BST) হয়।

একটি বাইনারি ট্রি দেওয়া থাকবে। আমাদের কাজ হল সেই ট্রির সাব-ট্রি যেটি BST, তার যোগফল প্রিন্ট করা।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
//creating binary tree node
struct Node {
    struct Node* left; struct Node* right;
    int data;
    Node(int data) {
        this->data = data;
        this->left = NULL;
        this->right = NULL;
    }
};
struct Info {
    int max;
    int min;
    bool isBST;
    int sum;
    int currmax;
};
Info MaxSumBSTUtil(struct Node* root, int& maxsum) {
    if (root == NULL) return { INT_MIN, INT_MAX, true, 0, 0 };
    if (root->left == NULL && root->right == NULL) {
        maxsum = max(maxsum, root->data);
        return { root->data, root->data, true, root->data, maxsum };
    }
    Info L = MaxSumBSTUtil(root->left, maxsum);
    Info R = MaxSumBSTUtil(root->right, maxsum);
    Info BST;
    if (L.isBST && R.isBST && L.max < root->data && R.min > root->data) {
        BST.max = max(root->data, max(L.max, R.max));
        BST.min = min(root->data, min(L.min, R.min));
        maxsum = max(maxsum, R.sum + root->data + L.sum);
        BST.sum = R.sum + root->data + L.sum;
        BST.currmax = maxsum;
        BST.isBST = true;
        return BST;
    }
    BST.isBST = false;
    BST.currmax = maxsum;
    BST.sum = R.sum + root->data + L.sum;
    return BST;
}
int MaxSumBST(struct Node* root) {
    int maxsum = INT_MIN;
    return MaxSumBSTUtil(root, maxsum).currmax;
}
int main() {
    struct Node* root = new Node(5);
    root->left = new Node(14);
    root->right = new Node(3);
    root->left->left = new Node(6);
    root->right->right = new Node(7);
    root->left->left->left = new Node(9);
    root->left->left->right = new Node(1);
    cout << MaxSumBST(root);
    return 0;
}

আউটপুট

10
  1. C++-এ বাইনারি ট্রির প্রতিটি লেভেলে নন-লিফ নোডের ম্যাক্সিমাম সাম

  2. C++-এ বাইনারি ট্রিতে সর্বোচ্চ স্পাইরাল যোগফল

  3. C++-এ বাইনারি ট্রিতে সর্বোচ্চ পথ যোগফল

  4. বাইনারি ট্রিতে ভার্টিকাল সমের সর্বোচ্চ মান খুঁজে বের করা C++-তে