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

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


समस्या विवरण

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

हल: ट्री सीरियलाइजेशन + हैशिंग

  1. प्रत्येक सबट्री को स्ट्रिंग के रूप में सीरियलाइज़ करें (नल के लिए '$' मार्कर)
  2. सीरियलाइज्ड स्ट्रिंग्स को हैश सेट में स्टोर करें
  3. यदि कोई नॉन-लीफ सबट्री पहले से सेट में है → डुप्लिकेट मिल गया

उदाहरण कोड

#include <iostream>
#include <unordered_set>
using namespace std;

const char MARKER = '$';

struct Node {
    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 subtrees;

string duplicateSubtreeFind(Node* root) {
    string res = "";
    if (root == NULL) return res + MARKER;
    
    string lStr = duplicateSubtreeFind(root->left);
    if (lStr == res) return res;
    
    string rStr = duplicateSubtreeFind(root->right);
    if (rStr == res) return res;
    
    res = res + root->key + lStr + rStr;
    
    if (res.length() > 3 && subtrees.find(res) != subtrees.end())
        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 == "")
        cout << "It has duplicate subtrees of size more than 1";
    else
        cout << "It has no duplicate subtrees of size more than 1";
    return 0;
}

आउटपुट

It has duplicate subtrees of size more than 1
  1. C++ में जांचें कि बाइनरी ट्री किसी अन्य बाइनरी ट्री का सबट्री है या नहीं C++ में जांचें कि बाइनरी ट्री किसी अन्य बाइनरी ट्री का सबट्री है या नहीं

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

  1. C++ में जांचें कि बाइनरी ट्री लेवल-वार सॉर्टेड है या नहीं C++ में जांचें कि बाइनरी ट्री लेवल-वार सॉर्टेड है या नहीं

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

  1. C++ में बाइनरी ट्री में चिल्ड्रन सम गुण की जांच C++ में बाइनरी ट्री में चिल्ड्रन सम गुण की जांच

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