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

सी ++ में एन-आरी पेड़ की गहराई?

आइए पहले उस संरचना को परिभाषित करें जो एक ट्री नोड का प्रतिनिधित्व करेगी जिसमें एक वर्ण कुंजी और नोड * का एक वेक्टर होता है।

struct Node{
   char key;
   vector<Node *> children;
};

इसके बाद हम अपना createNode(int key) फंक्शन बनाते हैं जो एक इंट की वैल्यू लेता है और इसे नोड के प्रमुख सदस्य को असाइन करता है। फ़ंक्शन पॉइंटर को बनाए गए स्ट्रक्चर नोड में लौटाता है।

Node *createNode(int key){
   Node *node = new Node;
   node->key = key;
   return node;
}

हमारा डेप्थऑफट्री (स्ट्रक्चर नोड * रूट) फंक्शन रूट नोड को पैरामीटर के रूप में लेता है। यदि रूट NULL है तो गहराई 0 के रूप में वापस आ जाती है।

int depthOfTree(struct Node *root){
   if (root==NULL)
      return 0;

फिर हम maxDepth वेरिएबल को परिभाषित करते हैं और इसके मान को 0 पर असाइन करते हैं। फिर हम ट्री के सभी बच्चों पर पुनरावृति करते हैं और प्रत्येक रिकर्सन पर maxDepth को बढ़ाते हैं। एक बार जब आधार शर्त पूरी हो जाती है और रिकर्सन खत्म हो जाता है तो हम अधिकतम गहराई वापस कर देते हैं।

int depthOfTree(struct Node *root){
   if (root==NULL)
      return 0;
      int maxDepth = 0;
   for(auto i: root->children){
      maxDepth = depthOfTree(i) + 1;
   }
   return maxDepth;
}

उदाहरण

आइए एन-आरी पेड़ की गहराई का पता लगाने के लिए निम्नलिखित कार्यान्वयन को देखें -

#include <iostream>
#include <vector>
using namespace std;
struct Node{
   char key;
   vector<Node *> children;
};
Node *createNode(int key){
   Node *node = new Node;
   node->key = key;
   return node;
}
int depthOfTree(struct Node *root){
   if (root==NULL)
      return 0;
   int maxDepth = 0;
   for(auto i: root->children){
      maxDepth = depthOfTree(i) + 1;
   }
   return maxDepth;
}
int main(){
   Node *root = createNode('S');
   (root->children).push_back(createNode('O'));
   (root->children).push_back(createNode('A'));
   (root->children).push_back(createNode('D'));
   (root->children).push_back(createNode('N'));
   (root->children[0]->children).push_back(createNode('L'));
   (root->children[0]->children).push_back(createNode('I'));
   (root->children[2]->children).push_back(createNode('R'));
   (root->children[3]->children).push_back(createNode('C'));
   (root->children[3]->children).push_back(createNode('H'));
   (root->children[3]->children).push_back(createNode('I'));
   cout <<"The depth of the n-ary tree is "<< depthOfTree(root) << endl;
   return 0;
}

आउटपुट

उपरोक्त कोड निम्न आउटपुट उत्पन्न करेगा -

The depth of the n-ary tree is 2

  1. C++ में बाइनरी ट्री की न्यूनतम गहराई

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें उस वृक्ष की न्यूनतम गहराई ज्ञात करनी है। जैसा कि हम जानते हैं कि न्यूनतम गहराई रूट नोड से निकटतम लीफ नोड तक सबसे छोटे पथ के साथ नोड्स की संख्या है। तो, अगर इनपुट पसंद है तो आउटपुट 2 . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - ट्री नोड्स

  1. C++ . में बाइनरी ट्री कैमरा

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हम पेड़ के नोड्स पर कैमरे लगाते हैं। अब नोड पर प्रत्येक कैमरा अपने माता-पिता, स्वयं और उसके बच्चों की निगरानी कर सकता है। हमें पेड़ के सभी नोड्स की निगरानी के लिए आवश्यक न्यूनतम कैमरों की संख्या ढूंढनी होगी। तो, अगर इनपुट की तरह है - तो आउटपुट 1 होगा, क्यों

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

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