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

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

इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम एक ऐसा प्रोग्राम बनाना है जो c++ में दिए गए बाइनरी ट्री के सभी स्तरों के बीच गैर-पत्ती नोड्स की अधिकतम राशि पायेगा।

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

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट -

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

आउटपुट - 9

स्पष्टीकरण - प्रत्येक स्तर पर गैर-पत्ती नोड्स का योग -

Level 1: 4
Level 2: 1+2 = 3
Level 3: 9 (4, 7 are leaf nodes)
Level 4: 0

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

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

उदाहरण

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

#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<<"The maximum sum of all non-lead nodes at a level of the binary tree is "<<maxLevelSum(root);
   return 0;
}

आउटपुट

The maximum sum of all non-lead nodes at a level of the binary tree is 9

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

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

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

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

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

    बाइनरी ट्री को देखते हुए, कार्य 1 से n तक के नोड में संग्रहीत प्रत्येक कुंजी से जुड़े स्तर को प्रिंट करना है उपरोक्त पेड़ में, नोड्स हैं - 10 लेवल 13 पर और 211 लेवल 2140 पर, 162, 100 और 146 लेवल 3 पर कुंजी को देखते हुए प्रोग्राम को उस विशेष कुंजी के स्तर को प्रिंट करना होगा। उदाहरण एल्गोरिदम न