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

अधिकतम लंबाई चक्र जो C++ में एक बाइनरी ट्री के दो नोड्स को जोड़कर बनाया जा सकता है

हमें एक बाइनरी ट्री दिया गया है। लक्ष्य दिए गए पेड़ में अधिकतम लंबाई चक्र खोजना है। हम रूटनोड से लेफ्ट सबट्री और राइट सबट्री की अधिकतम ऊंचाई का पता लगाकर ऐसा करेंगे और सबसे लंबा चक्र पाने के लिए इन अधिकतम लंबाई वाले रास्तों से जुड़ेंगे।

अधिकतम लंबाई चक्र जो C++ में एक बाइनरी ट्री के दो नोड्स को जोड़कर बनाया जा सकता है

उपरोक्त पेड़ के लिए अधिकतम लंबाई चक्र 1-2-3-4-7-6 या 1-6-7-4-3-2-1 है। लंबाई 6 है।

इनपुट - पेड़

अधिकतम लंबाई चक्र जो C++ में एक बाइनरी ट्री के दो नोड्स को जोड़कर बनाया जा सकता है

आउटपुट − अधिकतम लंबाई चक्र है − 5

स्पष्टीकरण - बाएँ उप-वृक्ष की अधिकतम ऊँचाई 3 और दाएँ उप-वृक्ष की ऊँचाई 1 है। चक्र की लंबाई 3+1+1=5 हो जाती है। साइकिल 1-2-3-4-6 या 1-6-4-3-2

इनपुट - पेड़

अधिकतम लंबाई चक्र जो C++ में एक बाइनरी ट्री के दो नोड्स को जोड़कर बनाया जा सकता है

आउटपुट − अधिकतम लंबाई चक्र है − 7

स्पष्टीकरण - बाएँ सबट्री की अधिकतम ऊँचाई 3 और दाएँ सबट्री की 3 है। साइकिल की लंबाई 3+3+1=7 हो जाती है। साइकिल 5-4-2-1-8-7-6 या 5-6-7-8-1-2-4-5

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • एक वर्ग ट्रीनोड बनाएं जिसमें सार्वजनिक डेटा सदस्य हों - नोड के वजन के लिए इंट डेटा, ऐसे अन्य नोड्स को इंगित करने के लिए बाएं और दाएं ट्रीनोड पॉइंटर्स।

  • फ़ंक्शन newNode(int data) डेटा को एक पैरामीटर के रूप में लेता है और एक नोड बनाता है जिसमें बाएँ और दाएँ पॉइंटर्स NULL के रूप में होते हैं।

  • newnode() फ़ंक्शन को कॉल करके एक ट्री बनाएं।

  • फ़ंक्शन maxheight(treenode* root) पेड़ की जड़ लेता है और जड़ में निहित पेड़ की अधिकतम ऊंचाई लौटाता है।

  • यह फ़ंक्शन जांचता है कि क्या रूट NULL है, इसका मतलब है कि ऊंचाई 0 है, वापसी 0.

  • ऊंचाई और ऊंचाई नोड रूट के बाएं और दाएं उपट्री की ऊंचाई की गणना करती है, अधिकतम ऊंचाई (रूट-> बाएं) पर रिकर्सिव कॉल द्वारा; और maxheight(root->right);

  • ऊँचाई और ऊँचाई की तुलना करके प्राप्त अधिकतम मान लौटाएँ।

  • मेन के अंदर हम ट्रीनोड के लेफ्ट सबट्री और राइट सबट्री की अधिकतम ऊंचाई के मानों को स्टोर करते हैं।

  • अब अधिकतम लंबाई चक्र रूट को शामिल करने के लिए अधिकतम ऊंचाई +अधिकतम ऊंचाई+1 दोनों का योग है।

  • परिणामस्वरूप चक्र की लंबाई प्रिंट करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
//class for tree
class treenode{
public:
   int data;
   treenode* left;
   treenode* right;
};
//find maximum height between left and right subtree of current root
int maxheight(treenode* root){
   if (root == NULL)
      return 0;
   else{
      int lheight = maxheight(root->left);
      int rheight = maxheight(root->right);
      //find maximum height
      if (lheight > rheight)
         return(lheight + 1);
      else
         return(rheight + 1);
      }
   }
   //creating a node of tree
   treenode* newNode(int data){
      treenode* Node = new treenode();
      Node->data = data;
      Node->left = NULL;
      Node->right = NULL;
      return(Node);
}
int main(){
   treenode *root = newNode(6);
   root->left = newNode(8);
   root->right = newNode(9);
   root->left->left = newNode(4);
   root->left->right = newNode(5);
   root->left->right->right = newNode(7);
   root->left->right->right->left = newNode(2);
   int maxlheight=maxheight(root->left);
   int maxrheight=maxheight(root->right);
   int maxlheight=maxDepth(root->left);
   int maxrheight=maxDepth(root->right);
   cout << "Maximum length cycle: " << maxlheight+maxrheight+1;
   return 0;
}

आउटपुट

Maximum length cycle: 6

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

    इस समस्या में, हमें एक बाइनरी ट्री दिया जाता है और हमें बाइनरी ट्री के सभी लीफ नोड्स को दाएं से बाएं प्रिंट करना होता है। आइए समस्या को समझने के लिए एक उदाहरण लेते हैं इनपुट - आउटपुट - 7 4 1 इस समस्या को हल करने के लिए, हमें बाइनरी ट्री को पार करना होगा। यह ट्रैवर्सल दो तरह से किया जा सकता है

  1. C++ में एक बाइनरी ट्री के दो नोड्स के बीच की दूरी का पता लगाएं

    मान लें कि हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें दो नोड्स u और v के बीच की दूरी ज्ञात करनी है। मान लीजिए कि पेड़ नीचे जैसा है - अब (4, 6) =4 के बीच की दूरी, पथ की लंबाई 4 है, (5, 8) के बीच की लंबाई =5 आदि। इस समस्या को हल करने के लिए, हम एलसीए (सबसे कम सामान्य पूर्वज) ढूंढेंगे, फिर

  1. C++ में एक स्टैक का उपयोग करके बाएं से दाएं बाइनरी ट्री में लीफ नोड्स प्रिंट करें

    प्रोग्राम को बाइनरी ट्री के लीफ नोड्स को बाएं से दाएं प्रिंट करना चाहिए, लेकिन चुनौती में केवल एक स्टैक का उपयोग करना शामिल है पुश () फ़ंक्शन के माध्यम से एक बाइनरी ट्री के नोड्स डालें और पॉप () ऑपरेशन के माध्यम से लीफ नोड्स प्रदर्शित करें। लीफ नोड्स अंतिम नोड होते हैं जिनके बाएँ और दाएँ पॉइंटर NU