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

C++ में जांचें कि ट्री आइसोमॉर्फिक है या नहीं

बाइनरी ट्री में, प्रत्येक नोड में दो बच्चे होते हैं, यानी बायां बच्चा और दायां बच्चा। मान लीजिए हमारे पास दो बाइनरी ट्री हैं और कार्य यह जांचना है कि क्या एक ट्री को दूसरे ट्री को उसके बाएं तरफ फ्लिप करके प्राप्त किया जा सकता है या नहीं।

एक ट्री आइसोमॉर्फिक है यदि इसे दूसरे ट्री को उसकी बाईं तरफ फ्लिप करके प्राप्त किया जा सकता है।

उदाहरण के लिए

इनपुट-1

C++ में जांचें कि ट्री आइसोमॉर्फिक है या नहीं

आउटपुट: आइसोमॉर्फिक

व्याख्या: दिया गया ट्री-2 ट्री-1 को बाईं तरफ फ्लिप करके प्राप्त किया जा सकता है, इस प्रकार ट्री आइसोमॉर्फिक है।

इस समस्या को हल करने का दृष्टिकोण

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

  • दो बाइनरी ट्री के लिए नोड्स बनाएं।
  • एक बूलियन फ़ंक्शन isIsomorphicTree(node*r1, node*r2) दो ट्री के रूट लेता है और लौटाता है कि ट्री आइसोमॉर्फिक है या नहीं।
  • प्रारंभ में यदि ट्री खाली है या इसमें कोई नोड नहीं है, तो True लौटाएं।
  • यदि सबट्री रूटेड फ्लिप नहीं है और यदि दोनों फ्लिप हैं, तो True लौटाएं।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
struct treenode {
    int data;
    treenode * left;
    treenode * right;
};
struct treenode * createNode(int d) {
    struct treenode * root = new treenode;
    root -> data = d;
    root -> left = NULL;
    root -> right = NULL;
    return root;
}
bool isIsomorphicTree(treenode * r1, treenode * r2) {
    if (r1 == NULL and r2 == NULL) {
        return true;
    }
    if (r1 == NULL or r2 == NULL) {
        return false;
    }
    return (r1 -> data == r2 -> data && ((isIsomorphicTree(r1 -> left, r2 -> right) && isIsomorphicTree(r1 -> right, r2 -> left)) || (isIsomorphicTree(r1 -> left, r2 -> left) && isIsomorphicTree(r1 -> right, r2 -> right))));
}
int main() {
    struct treenode * r1 = createNode(1);
    r1 -> left = createNode(2);
    r1 -> right = createNode(3);
    r1 -> left -> left = createNode(4);
    r1 -> left -> right = createNode(5);
    r1 -> right -> left = createNode(6);
    r1 -> left -> right -> left = createNode(7);
    r1 -> left -> right -> right = createNode(8);
    struct treenode * r2 = createNode(1);
    r2 -> left = createNode(3);
    r2 -> right = createNode(2);
    r2 -> right -> left = createNode(4);
    r2 -> right -> right = createNode(5);
    r2 -> left -> right = createNode(6);
    r2 -> right -> right -> left = createNode(8);
    r2 -> right -> right -> right = createNode(7);
    if (isIsomorphicTree(r1, r2)) {
        cout << "Isomorphic" << endl;
    } else {
        cout << "Not an Isomorphic" << endl;
    }
    return 0;
}

उपरोक्त कोड चलाने से आउटपुट इस प्रकार उत्पन्न होगा,

आउटपुट

Isomorphic

व्याख्या: दिया गया ट्री दूसरे ट्री को उसकी बाईं तरफ फ्लिप करके प्राप्त किया जा सकता है, इस प्रकार यह आइसोमॉर्फिक है।

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

    समस्या विवरण जांचें कि बाइनरी ट्री लेवल-वाइज क्रमबद्ध है या नहीं। प्रत्येक लेवल में नोड्स बाएं से दाएं क्रमबद्ध हों और प्रत्येक लेवल के मान पिछले लेवल से बड़े हों। एल्गोरिदम (लेवल ऑर्डर ट्रैवर्सल) क्यू का उपयोग करके लेवल ऑर्डर ट्रैवर्सल प्रत्येक लेवल के लिए न्यूनतम (min_val) और अधिकतम (max_val) ट

  1. C++ में जांचें कि दिया गया ट्री ग्राफ रैखिक है या नहीं C++ में जांचें कि दिया गया ट्री ग्राफ रैखिक है या नहीं

    यहां हम देखेंगे कि ट्री ग्राफ रैखिक है या नहीं, इसकी जांच कैसे करें। एक रैखिक ट्री ग्राफ को एक ही पंक्ति में व्यक्त किया जा सकता है। मान लीजिए यह एक रैखिक ट्री ग्राफ का उदाहरण है।लेकिन यह रैखिक नहीं है -किसी ग्राफ की जांच करने के लिए कि वह रैखिक है या नहीं, हम दो शर्तों का पालन कर सकते हैं:यदि नोड्स

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

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