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

C++ में समान संख्या में 1 और 0 वाला सबसे बड़ा सबट्री


एक बाइनरी ट्री दिया गया है। अब हमें समान संख्या में 1 और 0 वाला सबसे बड़ा सबट्री खोजने का कार्य दिया गया है; ट्री में केवल 0 और 1 हैं।

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

इस दृष्टिकोण में, हम 0 मान वाले सभी नोड्स को -1 से बदलने जा रहे हैं। ऐसा करने से हमारा प्रोग्राम सरल हो जाएगा क्योंकि अब हमें योग 0 के बराबर वाले सबसे बड़े सबट्री को खोजने की आवश्यकता है।

उदाहरण

उपरोक्त दृष्टिकोण के लिए C++ कोड

  #include <iostream> using namespace std; int maxi = -1; struct node { // हमारे ट्री नोड की संरचना     int data;     struct node *right, *left; }; struct node* newnode(int key){// नया नोड बनाने के लिए     struct node* temp = new node;     temp->data = key;     temp->right = NULL;     temp->left = NULL;     return temp; } void inorder(struct node* root){ // ट्री को पार करना (उपयोग नहीं किया गया)     if (root == NULL)         return;     inorder(root->left);     cout << root->data << endl;     inorder(root->right); } // फंक्शन जो 0 और 1 की समान संख्या वाले   // सबट्री का अधिकतम आकार लौटाता है int calculatingmax(struct node* root){     int a = 0, b = 0;     if (root == NULL)        return 0;     a = calculatingmax(root->right); // दायां सबट्री     a = a + 1; // पैरेंट शामिल करना     b = calculatingmax(root->left); // बायां सबट्री     a = b + a; // वर्तमान सबट्री में नोड्स की संख्या     if (root->data == 0) // यदि पूरे सबट्री का योग 0 है         // यदि कुल आकार         // वर्तमान मैक्स से अधिक है         if (a >= maxi)             maxi = a;     return a; } int calc_sum(struct node* root){ // प्रत्येक नोड पर मान अपडेट करना     if (root != NULL){         if (root->data == 0){                  root->data = -1;         }     }     int a = 0, b = 0;     // यदि बायां चाइल्ड मौजूद है     if (root->left != NULL)         a = calc_sum(root->left);     // यदि दायां चाइल्ड मौजूद है     if (root->right != NULL)         b = calc_sum(root->right);     root->data += (a + b);     return root->data; } // ड्राइवर कोड int main(){     struct node* root = newnode(1);     root->right = newnode(0);     root->right->right = newnode(1);     root->right->right->right = newnode(1);     root->left = newnode(0);     root->left->left = newnode(1);     root->left->left->left = newnode(1);     root->left->right = newnode(0);     root->left->right->left = newnode(1);     root->left->right->left->left = newnode(1);     root->left->right->right = newnode(0);     root->left->right->right->left = newnode(0);     root->left->right->right->left->left = newnode(1);     calc_sum(root);     calculatingmax(root);     //  cout << "h";     cout << maxi;     return 0; }

आउटपुट

6

उपरोक्त कोड की व्याख्या

उपरोक्त दृष्टिकोण में, हम 0 मान वाले सभी नोड्स को -1 से अपडेट करते हैं फिर अब हमने अपनी समस्या को योग 0 के बराबर वाले सबसे बड़े सबट्री को खोजने तक सीमित कर दिया है अब इस अपडेट के दौरान, हम प्रत्येक नोड को उस नोड पर रूटेड सबट्री के मान के साथ भी अपडेट करते हैं और अब हम दूसरे फंक्शन का उपयोग करके प्रत्येक नोड की गणना और जांच करते हैं जिसका मान 0 है और फिर उस ट्री में मौजूद नोड्स की अधिकतम संख्या निकालते हैं।

निष्कर्ष

इस ट्यूटोरियल में, हम समान संख्या में 1 और 0 वाला सबसे बड़ा सबट्री खोजने की समस्या को हल करते हैं। हमने इस समस्या के लिए C++ प्रोग्राम और पूरा दृष्टिकोण (सामान्य) भी सीखा जिससे हमने इस समस्या को हल किया। हम यही प्रोग्राम C, Java, Python, और अन्य भाषाओं में भी लिख सकते हैं। आशा है आपको यह ट्यूटोरियल उपयोगी लगा होगा।

  1. C++ में सबसे बड़ा BST सबट्री - अधिकतम नोड्स वाला BST खोजें C++ में सबसे बड़ा BST सबट्री - अधिकतम नोड्स वाला BST खोजें

    समस्या विवरण मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें उसका सबसे बड़ा सबट्री ढूंढना है जहां सबसे बड़ा का अर्थ है सबसे अधिक नोड्स वाला सबट्री। उदाहरण के लिए, यदि इनपुट इस तरह का ट्री है: तो आउटपुट 3 होगा, क्योंकि इस मामले में सबसे बड़ा BST सबट्री हाइलाइट किया गया है। समाधान दृष्टिकोण पोस्ट-ऑर्ड

  1. C++ में उल्टे उपट्री (Inverted Subtree) की जांच C++ में उल्टे उपट्री (Inverted Subtree) की जांच

    दो बाइनरी ट्री source और target दिए गए हैं। जांचें कि क्या source का कोई उल्टा रूप (inversion) target का उपट्री है। उल्टा रूप का अर्थ: बाएं और दाएं बच्चे वैकल्पिक रूप से स्वैप हो सकते हैं। रिकर्सिव जांच: दो ट्री उल्टे हैं यदि (बाएं-बाएं और दाएं-दाएं मेल खाते हैं) या (बाएं-दाएं और दाएं-बाएं मेल खाते

  1. Python में समान बाएं और दाएं उपट्री वाले सबसे बड़े उपट्री को ढूंढना Python में समान बाएं और दाएं उपट्री वाले सबसे बड़े उपट्री को ढूंढना

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें समान बाएं और दाएं उपट्री वाले सबसे बड़े उपट्री को ढूंढना है। पसंदीदा समय जटिलता O(n) है। तो, यदि इनपुट इस तरह है तो आउटपुट होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक फ़ंक्शन solve() परिभाषित करें। यह root, encode, maxSize, maxNode लेगा यदि