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

C++ में दिए गए बाइनरी ट्री के सभी स्तरों पर गैर-पत्ती नोड्स का अधिकतम योग (Maximum sum of non-leaf nodes among all levels)


इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में दिए गए बाइनरी ट्री के सभी स्तरों पर गैर-पत्ती नोड्स (non-leaf nodes) का अधिकतम योग ढूंढे।

समस्या विवरण - हम ट्री के हर स्तर पर सभी गैर-पत्ती नोड्स का योग निकालेंगे और फिर अधिकतम योग प्रिंट करेंगे।

आइए एक उदाहरण से समझते हैं:

इनपुट -

C++ में दिए गए बाइनरी ट्री के सभी स्तरों पर गैर-पत्ती नोड्स का अधिकतम योग (Maximum sum of non-leaf nodes among all levels)

आउटपुट - 9

व्याख्या - प्रत्येक स्तर पर गैर-पत्ती नोड्स का योग:

स्तर 1: 4
स्तर 2: 1+2 = 3
स्तर 3: 9 (4, 7 पत्ती नोड्स हैं)
स्तर 4: 0

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

तो, प्रत्येक स्तर पर, हम जांचेंगे कि क्या नोड का बायां या दायां बच्चा है, यदि नहीं तो इसे योग में जोड़ें। और एक maxSum बनाए रखें जो उस स्तर तक का अधिकतम योग संग्रहीत करता है। यदि उस स्तर के सभी गैर-पत्ती नोड्स का योग maxSum से अधिक है, तो हम उस स्तर के योग को अधिकतम से आरंभ करेंगे।

उदाहरण

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

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

int maxLevelSum(struct Node* root){
    if (root == NULL)
        return 0;
    int maxSum = root->data;
    queue<Node*> q;
    q.push(root);
    while (!q.empty()) {
        int count = q.size();
        int levelSum = 0;
        while (count--) {
            Node* temp = q.front();
            q.pop();
            if (temp->left != NULL || temp->right != NULL)
                levelSum = levelSum + temp->data;
            if (temp->left != NULL)
                q.push(temp->left);
            if (temp->right != NULL)
                q.push(temp->right);
        }
        maxSum = max(levelSum, maxSum);
    }
    return maxSum;
}

struct Node* insertNode(int data) {
    struct Node* node = new Node;
    node->data = data;
    node->left = node->right = NULL;
    return (node);
}

int main() {
    struct Node* root = insertNode(6);
    root->left = insertNode(1);
    root->right = insertNode(2);
    root->left->left = insertNode(4);
    root->left->right = insertNode(7);
    root->right->right = insertNode(9);
    root->right->right->left = insertNode(5);
    cout << "बाइनरी ट्री के एक स्तर पर सभी गैर-पत्ती नोड्स का अधिकतम योग है " << maxLevelSum(root);
    return 0;
}

आउटपुट

बाइनरी ट्री के एक स्तर पर सभी गैर-पत्ती नोड्स का अधिकतम योग है 9
  1. C++ में बाइनरी ट्री में अधिकतम पथ योग C++ में बाइनरी ट्री में अधिकतम पथ योग

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

  1. C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें

    मान लीजिए हमारे पास एक धनात्मक पूर्णांक L है, जो परफेक्ट बाइनरी ट्री में स्तरों की संख्या दर्शाता है। इस परफेक्ट बाइनरी ट्री में पत्ती नोड्स को 1 से n तक संख्या दी गई है। जहां n पत्ती नोड्स की संख्या है। पैरेंट नोड बच्चों का योग है। हमारा कार्य इस परफेक्ट बाइनरी ट्री के सभी नोड्स का योग प्रिंट करने

  1. C++ प्रोग्राम: बाइनरी ट्री में सभी नोड्स के लेवल प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री में सभी नोड्स के लेवल प्रिंट करना

    दिए गए बाइनरी ट्री में, कार्य 1 से n तक शुरू होने वाले प्रत्येक कुंजी से जुड़े लेवल को प्रिंट करना है जो एक नोड में संग्रहीत है। उपरोक्त ट्री में नोड्स हैं - 10 at level 1 3 and 211 at level 2 140, 162, 100 and 146 at level 3 दिए गए कुंजी के लिए प्रोग्राम को उस विशेष कुंजी का लेवल प्रिंट करना होगा।