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

जांचें कि क्या बाइनरी ट्री में C++ में आकार 2 या अधिक के डुप्लिकेट सबट्री हैं

विचार करें कि हमारे पास एक बाइनरी ट्री है। हमें यह पता लगाना है कि पेड़ में आकार 2 या उससे अधिक के कुछ डुप्लिकेट सबट्री हैं या नहीं। मान लीजिए हमारे पास नीचे जैसा एक बाइनरी ट्री है -

जांचें कि क्या बाइनरी ट्री में C++ में आकार 2 या अधिक के डुप्लिकेट सबट्री हैं

आकार 2 के दो समान उपप्रकार हैं। हम ट्री क्रमांकन और हैशिंग प्रक्रिया का उपयोग करके इस समस्या को हल कर सकते हैं। विचार उपट्री को स्ट्रिंग के रूप में क्रमबद्ध कर रहा है, और उन्हें हैश तालिका में संग्रहीत कर रहा है। एक बार जब हमें एक क्रमबद्ध पेड़ मिल जाता है जो पत्ती नहीं है, पहले से ही हैश टेबल में मौजूद है, तो सही लौटें।

उदाहरण

#include <iostream>
#include <unordered_set>
using namespace std;
const char MARKER = '$';
struct Node {
   public:
   char key;
   Node *left, *right;
};
Node* getNode(char key) {
   Node* newNode = new Node;
   newNode->key = key;
   newNode->left = newNode->right = NULL;
   return newNode;
}
unordered_set<string> subtrees;
string duplicateSubtreeFind(Node *root) {
   string res = "";
   if (root == NULL) // If the current node is NULL, return $
      return res + MARKER;
   string l_Str = duplicateSubtreeFind(root->left);
   if (l_Str.compare(res) == 0)
      return res;
   string r_Str = duplicateSubtreeFind(root->right);
   if (r_Str.compare(res) == 0)
      return res;
   res = res + root->key + l_Str + r_Str;
   if (res.length() > 3 && subtrees.find(res) != subtrees.end()) //if subtree is present, then return blank string return "";
   subtrees.insert(res);
   return res;
}
int main() {
   Node *root = getNode('A');
   root->left = getNode('B');
   root->right = getNode('C');
   root->left->left = getNode('D');
   root->left->right = getNode('E');
   root->right->right = getNode('B');
   root->right->right->right = getNode('E');
   root->right->right->left= getNode('D');
   string str = duplicateSubtreeFind(root);
   if(str.compare("") == 0)
      cout << "It has dublicate subtrees of size more than 1";
   else
      cout << "It has no dublicate subtrees of size more than 1" ;
}

आउटपुट

It has dublicate subtrees of size more than 1

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

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

  1. जांचें कि बाइनरी ट्री को सी ++ में स्तर-वार क्रमबद्ध किया गया है या नहीं

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

  1. C++ में एक बाइनरी ट्री में चिल्ड्रन सम प्रॉपर्टी की जाँच करें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। बाइनरी ट्री तब मान्य होता है जब वह निम्नलिखित गुणों से मिलता है। प्रत्येक नोड में बाएँ और दाएँ बच्चों के मानों के योग के समान डेटा मान होना चाहिए। अगर किसी भी तरफ बच्चे नहीं हैं, तो इसे 0 माना जाएगा। मान लीजिए नीचे की तरह एक पेड़ मौजूद है, जो दिए गए गुण स