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

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


यहां हम देखेंगे कि बाइनरी ट्री लेवल-वार सॉर्टेड है या नहीं, इसकी जांच कैसे करें। लेवल-वार सॉर्टेड बाइनरी ट्री नीचे जैसा दिखेगा -

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

प्रत्येक लेवल में, नोड्स बाएं से दाएं सॉर्टेड होते हैं, और प्रत्येक लेयर में अपने पिछले लेवल से अधिक मान होता है।

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

उदाहरण

#include <iostream> #include <queue> using namespace std; class Node {    public:    int key;    Node *left, *right; }; Node* getNode(int key) {    Node* newNode = new Node;    newNode->key = key;    newNode->left = newNode->right = NULL;    return newNode; } bool isLevelWiseSorted(Node* root) {    int prevMax = INT_MIN;    int min_val, max_val;    int levelSize;    queue<Node*> q;    q.push(root);    while (!q.empty()) {       levelSize = q.size();       min_val = INT_MAX;       max_val = INT_MIN;       while (levelSize > 0) {          root = q.front();          q.pop();          levelSize--;          min_val = min(min_val, root->key);          max_val = max(max_val, root->key);          if (root->left)          q.push(root->left);          if (root->right)          q.push(root->right);       }       if (min_val <= prevMax)          return false;       prevMax = max_val;    }    return true; } int main() {    Node* root = getNode(1);    root->left = getNode(2);    root->right = getNode(3);    root->left->left = getNode(4);    root->left->right = getNode(5);    root->right->left = getNode(6);    root->right->right = getNode(7);    if (isLevelWiseSorted(root))       cout << "Tree is levelwise Sorted";    else       cout << "Tree is Not levelwise sorted"; }

आउटपुट

Tree is level wise Sorted

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

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

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

    यहां हम देखेंगे कि बाइनरी ट्री सम-ट्री (SumTree) है या नहीं, इसकी जांच कैसे करें। अब सवाल यह है कि सम-ट्री क्या है। एक सम-ट्री एक बाइनरी ट्री है जहां एक नोड अपने बच्चों के योग का मान रखता है। ट्री का रूट उसके नीचे के सभी तत्वों का पूरा योग रखता है। यह सम-ट्री का एक उदाहरण है -इसे जांचने के लिए, हम ए

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

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