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

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


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

बाइनरी ट्री में एक विशेष शर्त होती है कि प्रत्येक नोड के अधिकतम दो बच्चे हो सकते हैं।

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

बाइनरी सर्च ट्री एक ट्री है जिसमें सभी नोड्स नीचे उल्लिखित गुणों का पालन करते हैं:

  • बाएं उप-ट्री की कुंजी का मान उसके पैरेंट (रूट) नोड की कुंजी के मान से कम होता है।
  • दाएं उप-ट्री की कुंजी का मान उसके पैरेंट (रूट) नोड की कुंजी के मान से अधिक या बराबर होता है।

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

उदाहरण

इनपुट

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

आउटपुट

32

व्याख्या

यहां, हमारे पास दो उप-ट्री हैं जो BST हैं। उनका योग है,

7 + 3 + 22 = 32 
6 + 5 + 17 = 28 
अधिकतम = 32।

समाधान दृष्टिकोण

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

उदाहरण

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम,

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

int findMax(int a, int b){ 
    if(a > b) 
        return a; 
    return b; 
} 

int findMin(int a, int b){ 
    if(a > b) 
        return b; 
    return a; 
} 

struct Node { 
    struct Node* left; 
    struct Node* right; 
    int data; 
    Node(int data){ 
        this->data = data; 
        this->left = NULL; 
        this->right = NULL; 
    } 
}; 

struct treeVal{ 
    int maxVal; 
    int minVal; 
    bool isBST; 
    int sum; 
    int currMax; 
}; 

treeVal CalcBSTSumTill(struct Node* root, int& maxsum){ 
    if (root == NULL) 
        return { -10000, 10000, true, 0, 0 }; 
    
    if (root->left == NULL && root->right == NULL) { 
        maxsum = findMax(maxsum, root->data); 
        return { root->data, root->data, true, root->data, maxsum }; 
    } 
    
    treeVal LeftSTree = CalcBSTSumTill(root->left, maxsum); 
    treeVal RightSTree = CalcBSTSumTill(root->right, maxsum); 
    treeVal currTRee; 
    
    if (LeftSTree.isBST && RightSTree.isBST && LeftSTree.maxVal < root->data && RightSTree.minVal > root->data) { 
        currTRee.maxVal = findMax(root->data, findMax(LeftSTree.maxVal, RightSTree.maxVal)); 
        currTRee.minVal = findMin(root->data, findMin(LeftSTree.minVal, RightSTree.minVal)); 
        maxsum = findMax(maxsum, RightSTree.sum + root->data + LeftSTree.sum); 
        currTRee.sum = RightSTree.sum + root->data + LeftSTree.sum; 
        currTRee.currMax = maxsum; 
        currTRee.isBST = true; 
        return currTRee; 
    } 
    
    currTRee.isBST = false; 
    currTRee.currMax = maxsum; 
    currTRee.sum = RightSTree.sum + root->data + LeftSTree.sum; 
    return currTRee; 
} 

int CalcMaxSumBST(struct Node* root){ 
    int maxsum = -10000; 
    return CalcBSTSumTill(root, maxsum).currMax; 
} 

int main(){ 
    struct Node* root = new Node(10); 
    root->left = new Node(12); 
    root->left->right = new Node(7); 
    root->left->right->left = new Node(3); 
    root->left->right->right = new Node(22); 
    root->right = new Node(6); 
    root->right->left = new Node(5); 
    root->right->left->right = new Node(17); 
    cout<<"The maximum sub-tree sum in a Binary Tree such that the sub-tree is also a BST is "<<CalcMaxSumBST(root); 
    return 0; 
}

आउटपुट

The maximum sub-tree sum in a Binary Tree such that the sub-tree is also a BST is 32
  1. C++ में बाइनरी ट्री में अधिकतम स्पाइरल सम C++ में बाइनरी ट्री में अधिकतम स्पाइरल सम

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

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

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

  1. पायथन में बाइनरी ट्री की अधिकतम चौड़ाई खोजने का प्रोग्राम पायथन में बाइनरी ट्री की अधिकतम चौड़ाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें ट्री में किसी भी स्तर की अधिकतम चौड़ाई ढूंढनी है। यहां एक स्तर की चौड़ाई उन नोड्स की संख्या है जो बाएं सबसे नोड और दाएं सबसे नोड के बीच रखे जा सकते हैं। उदाहरण के लिए, यदि इनपुट है: तो आउटपुट होगा 2। हल करने के चरण एक मैप d बनाएं, न्यूनतम और अधिकतम मान