Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में बाइनरी ट्री में अधिकतम सब-ट्री योग जैसे कि सब-ट्री भी BST हो


इस ट्यूटोरियल में, हम एक बाइनरी ट्री में अधिकतम सब-ट्री योग खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे जैसे कि सब-ट्री भी एक BST हो।

इसके लिए हमें एक बाइनरी ट्री प्रदान किया जाएगा। हमारा कार्य एक सब-ट्री का योग प्रिंट करना है जो एक बाइनरी सर्च ट्री भी है।

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 
// बाइनरी ट्री नोड बनाना 
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++ में बाइनरी ट्री में अधिकतम स्पाइरल सम C++ में बाइनरी ट्री में अधिकतम स्पाइरल सम

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में बाइनरी ट्री में अधिकतम स्पाइरल सम ढूंढेगा।बाइनरी ट्री का स्पाइरल सम  बाइनरी ट्री के स्पाइरल ट्रैवर्सल में मिलने वाले नोड्स का योग है।ट्री के स्पाइरल ट्रैवर्सल में, नोड्स को रूट से लीफ नोड तक ट्रैवर्स कि

  1. C++ में बाइनरी ट्री में अधिकतम पथ योग C++ में बाइनरी ट्री में अधिकतम पथ योग

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है जिसमें प्रत्येक नोड एक मान रखता है। हमारा कार्य बाइनरी ट्री के दो पत्तों के बीच अधिकतम पथ योग ढूंढने के लिए एक प्रोग्राम बनाना है। यहां, हमें एक पत्ते नोड से दूसरे पत्ते नोड तक का पथ ढूंढना है जो मानों का अधिकतम योग प्रदान करेगा। यह अधिकतम योग पथ रूट न

  1. बाइनरी ट्री में अधिकतम वर्टिकल योग खोजें C++ में बाइनरी ट्री में अधिकतम वर्टिकल योग खोजें C++ में

    मान लीजिए हमारे पास एक बाइनरी ट्री है। कार्य वर्टिकल ऑर्डर ट्रैवर्सल में सभी नोड्स के योग के अधिकतम को प्रिंट करना है। तो यदि ट्री नीचे जैसा है - वर्टिकल ऑर्डर ट्रैवर्सल इस तरह है - 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 यहां अधिकतम 12 है। दृष्टिकोण सरल है। हम वर्टिकल ऑर्डर ट्रैवर्सल करेंगे, फिर योग खोज