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

C++ में DFS का उपयोग करके n-ary ट्री के सभी लीफ नोड्स प्रिंट करना


इस समस्या में, हमें एक 2-D ऐरे दिया गया है जिसमें n-ary ट्री के एज होते हैं जहां एज n-ary ट्री के एज को परिभाषित करता है। हमें बने n-ary ट्री के सभी लीफ नोड्स प्रिंट करने हैं।

n-ary ट्री

n-ary ट्री एक ट्री है जिसमें अधिकतम n चाइल्ड होते हैं यानी एक नोड के 1, 2, ... n चाइल्ड नोड्स हो सकते हैं।

उदाहरण

Input: edge[][] = {{5,8}, {5,6}, {8,1}, {8,4}, {6,7}} 
Output: 1 4 7

व्याख्या - आइए एज ऐरे का उपयोग करके ट्री बनाएं -

C++ में DFS का उपयोग करके n-ary ट्री के सभी लीफ नोड्स प्रिंट करना

इस ट्री के लीफ नोड्स 1, 4, 7 हैं।

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

उदाहरण

यह प्रोग्राम हमारे समाधान का कार्यान्वयन दिखाता है:

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

void DFS(list<int> t[], int node, int parent) { 
    int flag = 0; 
    for (auto ir : t[node]) { 
        if (ir != parent) { 
            flag = 1; 
            DFS(t, ir, node); 
        } 
    } 
    if (flag == 0) 
        cout << node << "\t"; 
} 

int main() { 
    list<int> t[1005]; 
    pair<int, int> edges[] = { 
        { 1, 2 }, 
        { 1, 3 }, 
        { 2, 4 }, 
        { 3, 5 }, 
        { 3, 6 }, 
        { 3, 7 }, 
        { 6, 8 } 
    }; 
    int cnt = sizeof(edges) / sizeof(edges[0]); 
    int node = cnt + 1; 
    for (int i = 0; i < cnt; i++) { 
        t[edges[i].first].push_back(edges[i].second); 
        t[edges[i].second].push_back(edges[i].first); 
    } 
    cout << "Leaf nodes of the tree are:\n"; 
    DFS(t, 1, 0); 
    return 0; 
}

आउटपुट

Leaf nodes of the tree are - 4 5 8 7

  1. C++ प्रोग्राम: बाइनरी ट्री के विषम स्तरों पर नोड्स प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री के विषम स्तरों पर नोड्स प्रिंट करना

    इस ट्यूटोरियल में, हम एक दिए गए बाइनरी ट्री के विषम स्तरों पर मौजूद नोड्स को प्रिंट करने के प्रोग्राम पर चर्चा करेंगे। इस प्रोग्राम में, रूट नोड के लिए स्तर 1 माना जाता है और साथ ही वैकल्पिक स्तर अगला विषम स्तर होता है। उदाहरण के लिए, मान लें हमें निम्नलिखित बाइनरी ट्री दिया गया है: तो इस बाइनरी

  1. C++ प्रोग्राम: बाइनरी ट्री में सभी नोड्स के लेवल प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री में सभी नोड्स के लेवल प्रिंट करना

    दिए गए बाइनरी ट्री में, कार्य 1 से n तक शुरू होने वाले प्रत्येक कुंजी से जुड़े लेवल को प्रिंट करना है जो एक नोड में संग्रहीत है। उपरोक्त ट्री में नोड्स हैं - 10 at level 1 3 and 211 at level 2 140, 162, 100 and 146 at level 3 दिए गए कुंजी के लिए प्रोग्राम को उस विशेष कुंजी का लेवल प्रिंट करना होगा।

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

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