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

C++ में एक बाइनरी ट्री में सबसे गहरा बायां पत्ता नोड

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

   A
      B    C
D       E       F
                     G

आइए समस्या को हल करने के लिए चरणों को देखें।

  • चार, बाएँ और दाएँ पॉइंटर्स के साथ एक नोड संरचना लिखें।

  • डमी डेटा के साथ बाइनरी ट्री को इनिशियलाइज़ करें।

  • बाइनरी फ़ंक्शन में सबसे गहरे बाएं नोड को खोजने के लिए एक पुनरावर्ती फ़ंक्शन लिखें। गहरे नोड को स्टोर करने के लिए तीन तर्क रूट नोड, isLeftNode, और परिणाम सूचक लेता है।

  • यदि वर्तमान नोड बचा है और लीफ नोड है, तो परिणाम नोड को वर्तमान नोड से अपडेट करें।

  • बाएं उप-वृक्ष पर पुनरावर्ती फ़ंक्शन को कॉल करें।

  • रिकर्सिव फंक्शन को राइट सब ट्री पर कॉल करें।

  • यदि परिणाम नोड शून्य है, तो ऐसा कोई नोड नहीं है जो हमारी शर्तों को पूरा करता हो।

  • अन्यथा परिणाम नोड में डेटा प्रिंट करें।

उदाहरण

आइए कोड देखें।

#include <bits/stdc++.h>
using namespace std;
struct Node {
   char data;
   struct Node *left, *right;
};
Node *addNewNode(char data) {
   Node *newNode = new Node;
   newNode->data = data;
   newNode->left = newNode->right = NULL;
   return newNode;
}
void getDeepestLeftLeafNode(Node *root, bool isLeftNode, Node **resultPointer) {
   if (root == NULL) {
      return;
   }
   if (isLeftNode && !root->left && !root->right) {
      *resultPointer = root;
      return;
   }
   getDeepestLeftLeafNode(root->left, true, resultPointer);
   getDeepestLeftLeafNode(root->right, false, resultPointer);
}
int main() {
   Node* root = addNewNode('A');
   root->left = addNewNode('B');
   root->right = addNewNode('C');
   root->left->left = addNewNode('D');
   root->right->left = addNewNode('E');
   root->right->right = addNewNode('F');
   root->right->left->right = addNewNode('G');
   Node *result = NULL;
   getDeepestLeftLeafNode(root, false, &result);
   if (result) {
      cout << "The deepest left child is " << result->data << endl;
   }
   else {
      cout << "There is no left leaf in the given tree" << endl;
   }
   return 0;
}

आउटपुट

यदि आप उपरोक्त प्रोग्राम को निष्पादित करते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

The deepest left child is D

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उनका टिप्पणी अनुभाग में उल्लेख करें।


  1. C++ में अधिकतम बाइनरी ट्री C++ में अधिकतम बाइनरी ट्री

    मान लीजिए कि हमारे पास एक पूर्णांक सरणी है। उस सरणी के सभी तत्व अद्वितीय हैं। इस सरणी पर अधिकतम वृक्ष निर्माण को निम्नानुसार परिभाषित किया गया है - जड़ सरणी में अधिकतम संख्या धारण करेगा। लेफ्ट सबट्री सबएरे के बायीं ओर से निर्मित अधिकतम ट्री है जिसे अधिकतम संख्या से विभाजित किया जाता है। दाय

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

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

  1. सी ++ में बाइनरी ट्री में निकटतम पत्ता खोजें सी ++ में बाइनरी ट्री में निकटतम पत्ता खोजें

    मान लीजिए, एक बाइनरी ट्री दिया गया है। इसमें विभिन्न स्तरों पर पत्ती की गांठें होती हैं। एक और पॉइंटर दिया गया है, जो एक नोड की ओर इशारा कर रहा है। हमें नुकीले नोड से निकटतम लीफ नोड की दूरी ज्ञात करनी होगी। विचार करें कि पेड़ नीचे जैसा है - यहां लीफ नोड्स 2, -2 और 6 हैं। यदि पॉइंटर नोड -5 की ओर इ