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

C++ में n-ary ट्री में सम आकार के उपट्री


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

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

ट्री रूट नोड से शुरू होता है।

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

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

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

इनपुट:

C++ में n-ary ट्री में सम आकार के उपट्री

आउटपुट: 4

व्याख्या:

7 से रूटेड ट्री का आकार सम है।
2 से रूटेड ट्री का आकार सम है।
0 से रूटेड ट्री का आकार सम है।
3 से रूटेड ट्री का आकार सम है।

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

एक सरल दृष्टिकोण दिए गए नोड के लिए सभी चाइल्ड नोड्स को गिनना है, यदि यह सम है तो evenTreeCount बढ़ाएं। इसके लिए हम DFS का उपयोग करेंगे, और दिए गए नोड के लिए उपट्री की लंबाई ढूंढेंगे।

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

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

उदाहरण

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

int countEventSizeSubTree(vector<int> adj[], int n, int v, int& 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. C++ में N-एरी ट्री लेवल ऑर्डर ट्रैवर्सल C++ में N-एरी ट्री लेवल ऑर्डर ट्रैवर्सल

    मान लीजिए हमारे पास एक N-एरी ट्री है। हमें इसके नोड्स के मानों का लेवल ऑर्डर ट्रैवर्सल लौटाना है। N-एरी ट्री का इनपुट सीरियलाइजेशन उनके लेवल ऑर्डर ट्रैवर्सल में दर्शाया गया है, जहाँ बच्चों के प्रत्येक समूह को नल मान से अलग किया जाता है। उदाहरण: ट्री [1,null,3,2,4,null,5,6] के लिए आउटपुट [[1],[3,2,

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

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

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

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