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

सी++ में एन-आरी ट्री में अगला बड़ा तत्व

एन-आर्य पेड़ प्रत्येक नोड के लिए एन बच्चों वाला पेड़ है। हमें एक संख्या n दी गई है और हमें n-ary पेड़ से अगला बड़ा तत्व खोजना है।

हम n-ary पेड़ को पार करके और परिणाम को बनाए रखते हुए समाधान ढूंढ सकते हैं।

एल्गोरिदम

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

हम हर बार परिणाम को अपडेट कर रहे हैं जब हमें कोई ऐसा तत्व मिलता है जो दी गई संख्या से बड़ा और परिणाम से कम होता है। यह सुनिश्चित करता है कि हमें अंत में अगला बड़ा तत्व मिले।

कार्यान्वयन

C++ में उपरोक्त एल्गोरिथम का कार्यान्वयन निम्नलिखित है

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   vector<Node*> child;
};
Node* newNode(int data) {
   Node* newNode = new Node;
   newNode->data = data;
   return newNode;
}
void findNextGreaterElement(Node* root, int x, Node** result) {
   if (root == NULL) {
      return;
   }
   if (root->data > x) {
      if (!(*result) || (*result)->data > root->data) {
         *result = root;
      }
   }
   int childCount = root->child.size();
   for (int i = 0; i < childCount; i++) {
      findNextGreaterElement(root->child[i], x, result);
   }
   return;
}
int main() {
   Node* root = newNode(10);
   root->child.push_back(newNode(12));
   root->child.push_back(newNode(23));
   root->child.push_back(newNode(45));
   root->child[0]->child.push_back(newNode(40));
   root->child[1]->child.push_back(newNode(33));
   root->child[2]->child.push_back(newNode(12));
   Node* result = NULL;
   findNextGreaterElement(root, 20, &result);
   cout << result->data << endl;
   return 0;
}

आउटपुट

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

23

  1. सी++ में एन-आरी ट्री लेवल ऑर्डर ट्रैवर्सल

    मान लीजिए कि हमारे पास एक n-ary ट्री है, हमें इसके नोड्स के मानों के लेवल ऑर्डर ट्रैवर्सल को वापस करना होगा। नैरी-ट्री इनपुट क्रमांकन उनके स्तर के क्रम ट्रैवर्सल में दर्शाया गया है। यहां बच्चों के प्रत्येक समूह को शून्य मान से अलग किया जाता है (उदाहरण देखें)। तो निम्नलिखित पेड़ को [1,null,3,2,4,null

  1. C++ में बाइनरी सर्च ट्री इटरेटर

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

  1. सी ++ में बिना रिकर्सन के एन-आरी ट्री का प्रीऑर्डर ट्रैवर्सल

    इस समस्या में हमें एक N-ary Tree दिया जाता है। हमारा काम ट्री के प्रीऑर्डर ट्रैवर्सल को प्रिंट करना है। सबसे पहले, आइए कुछ बुनियादी शब्दावली सीखें, एन-आरी ट्री एक पेड़ है जिसमें सभी नोड्स में अधिकतम एन चाइल्ड नोड्स हो सकते हैं। उदाहरण 2-एरी (बाइनरी) ट्री में अधिकतम 2 चाइल्ड नोड होते हैं। प्रीऑर्ड