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

सी ++ में एन-आरी पेड़ में भी आकार उपट्री

इस समस्या में, हमें एक आसन्न सूची दी गई है जो एक n-ary पेड़ को दर्शाती है। हमारा कार्य n-ary ट्री में सम आकार के सबट्री की संख्या ज्ञात करना है।

एन-आरी ट्री को नोड्स के एक संग्रह के रूप में परिभाषित किया जाता है जिसे सामान्य रूप से निम्न तरीके से पदानुक्रम में दर्शाया जाता है।

पेड़ को रूट नोड पर प्रारंभ किया गया है।

पेड़ का प्रत्येक नोड अपने चाइल्ड नोड्स के लिए पॉइंटर्स की एक सूची रखता है।

चाइल्ड नोड्स की संख्या मी से कम या उसके बराबर है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट:

<मजबूत> सी ++ में एन-आरी पेड़ में भी आकार उपट्री

आउटपुट: 4

स्पष्टीकरण:

7 के साथ जड़ वाले पेड़ का आकार समान होता है।
2 के साथ जड़ वाले पेड़ का आकार समान होता है।
0 के साथ जड़ वाले पेड़ का आकार समान होता है।
3 जड़ वाले पेड़ का आकार समान होता है।

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

किसी दिए गए नोड के लिए सभी चाइल्ड नोड्स को गिनने का एक सरल तरीका है, अगर यह इवनट्रीकाउंट को भी बढ़ाता है। इसके लिए हम DFS का उपयोग करेंगे, और दिए गए नोड के लिए SubTree की लंबाई ज्ञात करेंगे।

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

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

उदाहरण

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

int countEventSizeSubTree(vector<int> adj[], int n, int v, int&amp; EvenCount){

   int size = 1;
   for (auto ele : adj[v]) {
      size += countEventSizeSubTree(adj, n, ele, EvenCount);
   }
   if (size % 2 == 0)
      EvenCount++;
   return size;
}

int main(){

   int n;
   n = 10;

   vector<int> adj[n + 1];
   adj[7].push_back(2);
   adj[7].push_back(9);
   adj[2].push_back(0);
   adj[2].push_back(1);
   adj[9].push_back(3);
   adj[3].push_back(8);
   adj[0].push_back(5);

   int EvenCount = 0;
   countEventSizeSubTree(adj, n, 1, EvenCount);
   cout<<"Even Size SubTree are "<<EvenCount;
   return 0;
}

आउटपुट -

Even Size SubTree are 0

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

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

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

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

  1. जाँच करें कि क्या एक बाइनरी ट्री C++ में किसी अन्य बाइनरी ट्री का सबट्री है

    मान लीजिए कि हमारे पास दो बाइनरी ट्री हैं। हमें यह जांचना होगा कि छोटा पेड़ दूसरे बाइनरी ट्री का सबट्री है या नहीं। गौर कीजिए कि ये दो पेड़ दिए गए हैं। दो पेड़ हैं। दूसरा वृक्ष पहले वाले का उपवृक्ष है। इस संपत्ति की जांच करने के लिए, हम पेड़ को पोस्ट-ऑर्डर फैशन में पार करेंगे, फिर यदि इस नोड के स