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

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

अवधारणा

किसी दिए गए बाइनरी ट्री के संबंध में, हमें यह सत्यापित करने की आवश्यकता है कि इसमें हीप प्रॉपर्टी है या नहीं, बाइनरी ट्री को हीप होने के लिए निम्नलिखित दो शर्तों को पूरा करने की आवश्यकता है -

  • बाइनरी ट्री एक पूर्ण वृक्ष होना चाहिए (अर्थात अंतिम को छोड़कर सभी स्तर पूर्ण होने चाहिए)।

  • बाइनरी ट्री के प्रत्येक नोड का मान उसके चाइल्ड नोड से अधिक या उसके बराबर होना चाहिए (अधिकतम-हीप को ध्यान में रखते हुए)।

उदाहरण

निम्नलिखित उदाहरण के संबंध में इस पेड़ में ढेर संपत्ति है -

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

निम्नलिखित उदाहरण में ढेर संपत्ति नहीं है -

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

विधि

उपरोक्त शर्तों में से प्रत्येक को अलग से सत्यापित करना आवश्यक है, पूर्णता सत्यापित करने के लिए isComplete (यह फ़ंक्शन जांचता है कि बाइनरी ट्री पूर्ण है या नहीं) और हीप isHeapUtil फ़ंक्शन को सत्यापित करने के लिए लिखा गया है।

लेखन के संबंध में isHeapUtil फ़ंक्शन, हम निम्नलिखित बातों पर विचार करते हैं -

  • प्रत्येक नोड में 2 बच्चे हो सकते हैं, 0 बच्चे (अंतिम स्तर के नोड) या 1 बच्चा (इस तरह का अधिकतम एक नोड हो सकता है)।

  • यदि यह देखा गया है कि नोड का कोई बच्चा नहीं है, तो यह एक लीफ नोड है और सही (बेस केस) लौटाता है

  • यदि यह देखा गया है कि नोड का एक बच्चा है (इसे बच्चा छोड़ दिया जाना चाहिए क्योंकि यह एक पूर्ण पेड़ है) तो हमें इस नोड की तुलना केवल इसके एकल बच्चे से करने की आवश्यकता है।

  • यदि यह देखा गया है कि नोड में दोनों बच्चे हैं तो दोनों उप-वृक्षों के लिए पुनरावर्ती नोड पर हीप गुण सत्यापित करें।

उदाहरण

/* C++ program to checks if a binary tree is max heap or not */
#include <bits/stdc++.h>
using namespace std;
struct Node1{
   int key;
   struct Node1 *left;
   struct Node1 *right;
};
struct Node1 *newNode(int k){
   struct Node1 *node1 = new Node1;
   node1->key = k;
   node1->right = node1->left = NULL;
   return node1;
}
unsigned int countNodes(struct Node1* root1){
   if (root1 == NULL)
      return (0);
   return (1 + countNodes(root1->left) + countNodes(root1->right));
}
bool isCompleteUtil (struct Node1* root1, unsigned int index1, unsigned int number_nodes){
   if (root1 == NULL)
      return (true);
   if (index1 >= number_nodes)
      return (false);
   // Recur for left and right subtrees
   return (isCompleteUtil(root1->left, 2*index1 + 1, number_nodes) && isCompleteUtil(root1->right, 2*index1 + 2, number_nodes));
}
bool isHeapUtil(struct Node1* root1){
   if (root1->left == NULL && root1->right == NULL)
      return (true);
   if (root1->right == NULL){
      return (root1->key >= root1->left->key);
   }
   else{
      if (root1->key >= root1->left->key &&
         root1->key >= root1->right->key)
      return ((isHeapUtil(root1->left)) &&
      (isHeapUtil(root1->right)));
      else
         return (false);
   }
}
bool isHeap(struct Node1* root1){
   unsigned int node_count = countNodes(root1);
   unsigned int index1 = 0;
   if (isCompleteUtil(root1, index1, node_count) &&
      isHeapUtil(root1))
   return true;
   return false;
}
// Driver program
int main(){
   struct Node1* root1 = NULL;
   root1 = newNode(10);
   root1->left = newNode(9);
   root1->right = newNode(8);
   root1->left->left = newNode(7);
   root1->left->right = newNode(6);
   root1->right->left = newNode(5);
   root1->right->right = newNode(4);
   root1->left->left->left = newNode(3);
   root1->left->left->right = newNode(2);
   root1->left->right->left = newNode(1);
   if (isHeap(root1))
      cout << "Given binary tree is a Heap\n";
   else
      cout << "Given binary tree is not a Heap\n";
   return 0;
}

आउटपुट

Given binary tree is a Heap

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

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

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

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

  1. जांचें कि क्या दिया गया बाइनरी ट्री पायथन में हीप है

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें जांचना है कि यह ढेर है या नहीं। ढेर में निम्नलिखित गुण हैं:ढेर एक द्विआधारी वृक्ष होगा वह वृक्ष एक पूर्ण वृक्ष होना चाहिए (इसलिए अंतिम को छोड़कर सभी स्तर पूर्ण होना चाहिए)। उस पेड़ का प्रत्येक नोड मान उसके चाइल्ड नोड (अधिकतम-ढेर) से अधिक या उसके बराबर होना