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

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


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

सर्पिल योग बाइनरी ट्री का, बाइनरी ट्री के स्पाइरल ट्रैवर्सल में पाए जाने वाले नोड्स का योग होता है।

एक पेड़ के सर्पिल ट्रैवर्सल में, नोड्स को रूट से लीफ नोड तक ट्रैवर्स किया जाता है। ट्रैवर्सल बाएं से दाएं और फिर अगले स्तर के लिए दाएं से बाएं और आगे के स्तरों के लिए होता है।

उदाहरण -

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

आउटपुट -5

स्पष्टीकरण -

हम पेड़ के दूसरे स्तर के पहले नोड तक सर्पिल ट्रैवर्सल पर विचार करेंगे।

1+ 5 = 5.

तीसरी पंक्ति के योग तत्व हैं (1-9+6-4 =-6) जो समग्र योग को कम करेगा, इसलिए अधिकतम योग को देखते हुए इसे हटा दिया जाता है।

इस समस्या को हल करने के लिए, हम एक सरणी का उपयोग करेंगे जो प्रत्येक स्तर पर तत्वों के योग को संग्रहीत करेगा, और प्रत्येक स्तर पर स्पिलर योग खोजने के लिए, हम दो स्टैक का उपयोग करेंगे। फिर अंत में, हम जाँच करेंगे कि क्या स्तर के बाद राशि को शामिल करने से अधिकतम राशि बढ़ जाती है, यदि हाँ तो हम इसे ले लेंगे अन्यथा शेष सर्पिल को त्याग दें।

उदाहरण

बाइनरी ट्री में अधिकतम सर्पिल योग खोजने का कार्यक्रम

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   Node *left, *right;
};
Node* insertNode(int data){
   Node* node = new Node;
   node->data = data;
   node->left = node->right = NULL;
   return node;
}
int findMaxSum(vector<int> arr, int n){
   int sum = INT_MIN;
   int maxSum = INT_MIN;
   for (int i = 0; i < n; i++) {
      if (sum < 0)
         sum = arr[i];
      else
         sum += arr[i];
      maxSum = max(maxSum, sum);
   }
   return maxSum;
}
int SpiralSum(Node* root){
   if (root == NULL)
      return 0;
   stack<Node*> sRtL;
   stack<Node*> sLtR;
   vector<int> arr;
   sRtL.push(root);
   while (!sRtL.empty() || !sLtR.empty()) {
      while (!sRtL.empty()) {
         Node* temp = sRtL.top();
         sRtL.pop();
         arr.push_back(temp->data);
         if (temp->right)
            sLtR.push(temp->right);
         if (temp->left)
            sLtR.push(temp->left);
      }
      while (!sLtR.empty()) {
         Node* temp = sLtR.top();
         sLtR.pop();
         arr.push_back(temp->data);
         if (temp->left)
            sRtL.push(temp->left);
         if (temp->right)
            sRtL.push(temp->right);
      }
   }
   return findMaxSum(arr, arr.size());
}
int main(){
   Node* root = insertNode(1);
   root->left = insertNode(5);
   root->right = insertNode(-1);
   root->left->left = insertNode(-4);
   root->left->right = insertNode(6);
   root->right->left = insertNode(-9);
   root->right->right = insertNode(1);
   cout << "Maximum Spiral Sum in binary tree : "<<SpiralSum(root);
   return 0;
}

आउटपुट

Maximum Spiral Sum in binary tree : 6

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

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

  1. सी ++ में एक बाइनरी पेड़ के एंटी क्लॉकवाइज सर्पिल ट्रैवर्सल?

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

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

    मान लीजिए कि हमारे पास एक गैर-खाली बाइनरी ट्री है। हमें पथ योग ज्ञात करना है। तो यहां, पथ कुछ शुरुआती नोड से किसी भी नोड में नोड्स का कोई अनुक्रम है जहां माता-पिता कनेक्शन मौजूद हैं। पथ में कम से कम एक नोड होना चाहिए और रूट नोड के माध्यम से जाने की आवश्यकता नहीं है। तो अगर इनपुट ट्री है - यहां आउ