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

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

इस समस्या में, हमें एक 2-डी सरणी दी जाती है जिसमें एक 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++ . का उपयोग करके एक पेड़ के विषम स्तरों पर नोड्स को प्रिंट करने का कार्यक्रम

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

  1. C++ प्रोग्रामिंग में एक बाइनरी ट्री में सभी नोड्स के प्रिंट स्तर।

    बाइनरी ट्री को देखते हुए, कार्य 1 से n तक के नोड में संग्रहीत प्रत्येक कुंजी से जुड़े स्तर को प्रिंट करना है उपरोक्त पेड़ में, नोड्स हैं - 10 लेवल 13 पर और 211 लेवल 2140 पर, 162, 100 और 146 लेवल 3 पर कुंजी को देखते हुए प्रोग्राम को उस विशेष कुंजी के स्तर को प्रिंट करना होगा। उदाहरण एल्गोरिदम न

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

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