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

C++ . में BST से तल और छत

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

  • जड़ कुंजी है। तब मूल मान अधिकतम मूल्य होता है
  • यदि रूट डेटा <कुंजी है, तो सीलिंग वैल्यू लेफ्ट सबट्री पर नहीं होगी, फिर राइट सबट्री पर आगे बढ़ें, और प्रॉब्लम डोमेन को कम करें
  • यदि रूट डेटा> कुंजी है, तो सीलिंग मान दाएं सबट्री पर हो सकता है, हमें बाएं सबट्री में कुंजी की तुलना में बड़े डेटा वाला नोड मिल सकता है, यदि ऐसा कोई तत्व मौजूद नहीं है, तो रूट सीलिंग वैल्यू है।

मान लीजिए पेड़ इस तरह है -

C++ . में BST से तल और छत

0, 1, 2 की सीलिंग 2 है, 3 की सीलिंग है, 4 है और इसी तरह आगे भी

यहां हम केवल सीलिंग फंक्शन देखेंगे, अगर हम इसे थोड़ा संशोधित करते हैं, तो हम फ्लोर वैल्यू प्राप्त कर सकते हैं।

उदाहरण

#include <iostream>
using namespace std;
class node {
   public:
   int key;
   node* left;
   node* right;
};
node* getNode(int key) {
   node* newNode = new node();
   newNode->key = key;
   newNode->left = NULL;
   newNode->right = NULL;
   return newNode;
}
int ceiling(node* root, int num) {
   if (root == NULL)
   return -1;
   if (root->key == num)
      return root->key;
   if (root->key < num)
      return ceiling(root->right, num);
   int ceil = ceiling(root->left, num);
   return (ceil >= num) ? ceil : root->key;
}
int main() {
   node* root = getNode(8);
   root->left = getNode(4);
   root->right = getNode(12);
   root->left->left = getNode(2);
   root->left->right = getNode(6);
   root->right->left = getNode(10);
   root->right->right = getNode(14);
   for (int i = 0; i < 16; i++)
   cout << i << "\tCeiling: " << ceiling(root, i) << endl;
}

आउटपुट

0 Ceiling: 2
1 Ceiling: 2
2 Ceiling: 2
3 Ceiling: 4
4 Ceiling: 4
5 Ceiling: 6
6 Ceiling: 6
7 Ceiling: 8
8 Ceiling: 8
9 Ceiling: 10
10 Ceiling: 10
11 Ceiling: 12
12 Ceiling: 12
13 Ceiling: 14
14 Ceiling: 14
15 Ceiling: -1

  1. सी ++ में इनऑर्डर और पोस्टऑर्डर ट्रैवर्सल से प्रीऑर्डर करें

    इस समस्या में, हमें एक बाइनरी ट्री का इनऑर्डर और पोस्टऑर्डर ट्रैवर्सल दिया जाता है। हमारा काम पेड़ के पोस्टऑर्डर ट्रैवर्सल को प्रिंट करना है। आइए समस्या को समझने के लिए एक उदाहरण लेते हैं Input:inorder: 16 7 21 12 1 5 9 postorder: 16 21 7 1 9 5 12 Output: preorder: 12 7 16 21 5 1 9 Explanation: the

  1. सी ++ में छत और फर्श कार्य

    सील फंक्शन सील फ़ंक्शन सबसे छोटा संभव पूर्णांक मान देता है जो मान के बराबर या उससे अधिक होता है। यह फ़ंक्शन C++ भाषा में cmath हेडर फ़ाइल में घोषित किया गया है। यह सिंगल वैल्यू लेता है जिसकी सील वैल्यू की गणना की जानी है। वैरिएबल का डेटाटाइप डबल/फ्लोट/लॉन्ग डबल ही होना चाहिए। यहाँ C++ भाषा में cei

  1. फर्श () और छत () फ़ंक्शन पायथन

    ये दो विधियां पायथन गणित मॉड्यूल का हिस्सा हैं जो एक भिन्नात्मक संख्या के निकटतम पूर्णांक मान प्राप्त करने में मदद करती हैं। फर्श () यह दशमलव के साथ एक संख्या को पैरामीटर के रूप में स्वीकार करता है और पूर्णांक देता है जो संख्या से छोटा होता है। वाक्यविन्यास Syntax: floor(x) Where x is a numeric val