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

C++ में दी गई रेंज में आने वाले BST उपट्री की गणना करें


हमें इनपुट के रूप में एक बाइनरी सर्च ट्री दिया गया है। लक्ष्य BST में उन उपट्री की संख्या ढूंढना है जिनके नोड मान प्रारंभ और अंत की रेंज के बीच में हैं। यदि प्रारंभ 5 है और अंत 50 है। तो BST में उन उपट्री की गणना करें जिनके सभी नोड्स के वजन >=5 और <=50 हैं।

इनपुट: नीचे दिया गया ट्री - रेंज [3-6]

C++ में दी गई रेंज में आने वाले BST उपट्री की गणना करें

आउटपुट: रेंज में आने वाले ट्री की संख्या: 2

व्याख्या: नोड्स 4 और 6 के लिए। उनके उपट्री (NULL) 3-6 के बीच में हैं।

इनपुट: नीचे दिया गया ट्री: रेंज [12-20]

C++ में दी गई रेंज में आने वाले BST उपट्री की गणना करें

आउटपुट: रेंज में आने वाले ट्री की संख्या: 3

व्याख्या: नोड्स 16, 14 और 20 के लिए। उनके उपट्री 12-20 के बीच में हैं।

प्रयुक्त दृष्टिकोण

  • स्ट्रक्चर Btreenode का उपयोग ट्री के नोड को बनाने के लिए किया जाता है, जिसमें इन्फो भाग पूर्णांक होता है और सेल्फ-रेफरेंसिंग लेफ्ट और राइट पॉइंटर्स उपट्री को इंगित करते हैं।
  • फ़ंक्शन Btreenode* insert(int data) का उपयोग डेटा को इन्फो के रूप में और लेफ्ट और राइट पॉइंटर्स को NULL के रूप में नोड बनाने के लिए किया जाता है।
  • इंसर्ट फ़ंक्शन को दी गई संरचना के लिए कॉल करके BST बनाएं। रूट नोड के दाईं ओर नोड जोड़ने के लिए (root->right = insert(70);) और रूट के बाईं ओर (root->left = insert(30);)।
  • चर l और h रेंज के न्यूनतम और अधिकतम मान संग्रहीत करने के लिए उपयोग किए जाते हैं।
  • चर count ट्री के अंदर उन BST की गणना संग्रहीत करता है जो l और h के बीच रेंज में हैं। प्रारंभ में 0।
  • फ़ंक्शन getBtreeCount(Btreenode* root, int low, int high, int* count) BST के रूट, रेंज की बाएं और दाएं सीमाओं और count के पते को पैरामीटर के रूप में लेता है और प्रत्येक रिकर्सिव कॉल के लिए count के मान को अपडेट करता है।
  • वर्तमान रूट के लिए जांचें कि क्या यह NULL है, यदि हाँ तो 1 लौटाएं क्योंकि यह ट्री का हिस्सा नहीं है।
  • वर्तमान नोड्स के लिए, रिकर्सिव कॉल द्वारा इसके सभी बाएं और दाएं उपट्री नोड्स की जांच करें कि क्या वे दी गई रेंज में हैं। getBtreeCount(root->left, low, high, count); और getBtreeCount(root->right, low, high, count);
  • यदि दोनों उपट्री रेंज के बीच में हैं और वर्तमान नोड भी रेंज में है तो वर्तमान नोड पर रूटेड ट्री रेंज में है। count बढ़ाएं। if (left && right && root->info >= low && root->info <= high) और ++*count; return 1.
  • अंत में count में सभी उपट्री की गणना के रूप में अपडेटेड मान होगा।
  • count में परिणाम प्रिंट करें।

उदाहरण कोड

#include <bits/stdc++.h> using namespace std; // एक BST नोड struct Btreenode { int info; Btreenode *left, *right; }; int getBtreeCount(Btreenode* root, int low, int high, int* count){ // बेस केस if (root == NULL) return 1; int left = getBtreeCount(root->left, low, high, count); int right = getBtreeCount(root->right, low, high, count); if (left && right && root->info >= low && root->info <= high) { ++*count; return 1; } return 0; } Btreenode* insert(int data){ Btreenode* temp = new Btreenode; temp->info = data; temp->left = temp->right = NULL; return (temp); } int main(){ /* BST इनपुट के लिए 50 / \ 30 70 / \ / \ 20 40 60 80 */ Btreenode* root = insert(50); root->left = insert(30); root->right = insert(70); root->left->left = insert(20); root->left->right= insert(40); root->right->left = insert(60); root->right->right = insert(80); int l = 10; int h = 50; int count=0; getBtreeCount(root, l, h, &count); cout << "रेंज में आने वाले उपट्री की संख्या: " <<count; return 0; }

आउटपुट

रेंज में आने वाले उपट्री की संख्या: 3

  1. C++ में BST कीज़ को दी गई रेंज में प्रिंट करना - O(1) स्पेस C++ में BST कीज़ को दी गई रेंज में प्रिंट करना - O(1) स्पेस

    इस समस्या में, हमें दो मान k1 और k2 (k1 < k2) दिए गए हैं, और बाइनरी सर्च ट्री की रूट। हमारा कार्य दी गई रेंज में BST कीज़ प्रिंट करने का प्रोग्राम बनाना है। समस्या विवरण: हम ट्री की सभी कीज़ को n1 से n2 तक बढ़ते क्रम में प्रिंट करेंगे। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: k1 = 4, k2

  1. C++ में यूनिवैल्यू सबट्री की गणना C++ में यूनिवैल्यू सबट्री की गणना

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें यूनिवैल्यू सबट्री की संख्या गिननी है। यहाँ यूनिवैल्यू सबट्री का अर्थ है कि सबट्री के सभी नोड्स का मान समान हो।इसलिए, यदि इनपुट है root = [5,1,5,5,5,null,5],तो आउटपुट 4 होगा।इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:एक फ़ंक्शन solve() परिभाषित करें,

  1. C++ में BST नोड्स गिनना जो दी गई रेंज में हैं C++ में BST नोड्स गिनना जो दी गई रेंज में हैं

    हमें नोड्स से बना एक बाइनरी सर्च ट्री दिया गया है और एक रेंज भी दी गई है और कार्य उन नोड्स की संख्या की गणना करना है जो दी गई रेंज में हैं और परिणाम प्रदर्शित करना है। एक बाइनरी सर्च ट्री (BST) एक ट्री है जिसमें सभी नोड्स नीचे उल्लिखित गुणों का पालन करते हैं: एक नोड का बायां सबट्री उस नोड की कुंजी