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

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


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

समस्या विवरण

हम बाइनरी ट्री के उपसमुच्चय (subsets) को चुनेंगे ताकि योग अधिकतम हो और नोड्स सीधे जुड़े न हों।

उदाहरण

इनपुट

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

आउटपुट

24

व्याख्या

विचार किए जाने वाले तत्व हैं: 8 + 5 + 9 + 2 = 24

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

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

प्रत्येक नोड के लिए समान पैरेंट-चाइल्ड सबट्री के योग को कई बार ढूंढने से कम्प्यूटेशन ओवरहेड बढ़ेगा और इससे निपटने के लिए, हम मेमोराइजेशन का उपयोग करेंगे और नोड तक के maxSum को एक मैप में संग्रहीत करेंगे जिसका उपयोग बाद में किया जा सकता है।

उदाहरण

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

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

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

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

int findMaxSumBT(node* node, map& nodeSum); 

int sumSubTreeNodes(node* node, map& nodeSum){ 
    int maxSum = 0; 
    if (node->left) 
        maxSum += findMaxSumBT(node->left->left, nodeSum) + 
        findMaxSumBT(node->left->right, nodeSum); 
    if (node->right) 
        maxSum += findMaxSumBT(node->right->left, nodeSum) + 
        findMaxSumBT(node->right->right, nodeSum); 
    return maxSum; 
} 

int findMaxSumBT(node* node, map& nodeSum){ 
    if (node == NULL) 
        return 0; 
    if (nodeSum.find(node) != nodeSum.end()) 
        return nodeSum[node]; 
    
    int sumInclCurr = node->data + sumSubTreeNodes(node, nodeSum); 
    int sumExclCurr = findMaxSumBT(node->left, nodeSum) + 
    findMaxSumBT(node->right, nodeSum); 
    
    nodeSum[node] = max(sumInclCurr, sumExclCurr); 
    return nodeSum[node]; 
} 

int main(){ 
    node* root = newNode(9); 
    root->left = newNode(4); 
    root->right = newNode(7); 
    root->left->left = newNode(8); 
    root->left->right = newNode(5); 
    root->right->left = newNode(2); 
    map nodeSum; 
    cout<<"Maximum sum of nodes in Binary tree such that no two are adjacent using Dynamic Programming is "<<findMaxSumBT(root, nodeSum); 
    return 0; 
}

आउटपुट

Maximum sum of nodes in Binary tree such that no two are adjacent using Dynamic Programming is 24
  1. C++ में बाइनरी ट्री के दो नोड्स को जोड़कर बनने वाले अधिकतम लंबाई के चक्र C++ में बाइनरी ट्री के दो नोड्स को जोड़कर बनने वाले अधिकतम लंबाई के चक्र

    हमें एक बाइनरी ट्री दिया गया है। लक्ष्य दिए गए ट्री में अधिकतम लंबाई का चक्र ढूंढना है। हम इसे रूट नोड से बाएं उपट्री और दाएं उपट्री की अधिकतम ऊंचाई ढूंढकर और इन अधिकतम लंबाई के पथों को जोड़कर सबसे लंबा चक्र प्राप्त करेंगे। उपरोक्त ट्री के लिए अधिकतम लंबाई का चक्र 1-2-3-4-7-6 या 1-6-7-4-3-2-1 है। ल

  1. सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++ सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++

    इस समस्या में, हमें एक सर्कुलर ऐरे cirArr[] दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में सर्कुलर ऐरे में अधिकतम योग ढूंढे जहाँ कोई दो आसन्न तत्व न हों।समस्या विवरणसर्कुलर ऐरे के लिए, हमें ऐरे के तत्वों का अधिकतम योग ढूंढना है जहाँ आसन्न तत्वों को नहीं लिया जा सकता, यानी हमें वैकल्पिक तत

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

    इस ट्यूटोरियल में, हम एक दिए गए बाइनरी ट्री के विषम स्तरों पर मौजूद नोड्स को प्रिंट करने के प्रोग्राम पर चर्चा करेंगे। इस प्रोग्राम में, रूट नोड के लिए स्तर 1 माना जाता है और साथ ही वैकल्पिक स्तर अगला विषम स्तर होता है। उदाहरण के लिए, मान लें हमें निम्नलिखित बाइनरी ट्री दिया गया है: तो इस बाइनरी