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

सी ++ में दी गई सीमा में स्थित बीएसटी उपट्री की गणना करें

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

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

सी ++ में दी गई सीमा में स्थित बीएसटी उपट्री की गणना करें

आउटपुट − रेंज में पड़े पेड़ों की संख्या − 2

स्पष्टीकरण - नोड्स 4 और 6 के लिए ही। उनके उप-प्रजातियां ( NULL ) 3-6 के बीच होती हैं।

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

सी ++ में दी गई सीमा में स्थित बीएसटी उपट्री की गणना करें

आउटपुट − श्रेणी में पड़े पेड़ों की संख्या − 3

स्पष्टीकरण - नोड्स 16, 14 और 20 के लिए। उनके सबट्री 12-20 के बीच होते हैं।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • संरचना Btreenode का उपयोग एक पेड़ के नोड को बनाने के लिए किया जाता है, जिसमें जानकारी भाग पूर्णांक के रूप में होता है और सबट्री को इंगित करने के लिए बाएं और दाएं पॉइंटर्स को स्वयं संदर्भित करता है।

  • फ़ंक्शन Btreenode* insert(int data) का उपयोग डेटा के साथ एक नोड बनाने के लिए किया जाता है और बाएँ और दाएँ पॉइंटर्स NULL के रूप में होते हैं।

  • किसी दिए गए ढांचे के लिए कॉल करके सम्मिलित फ़ंक्शन का उपयोग करके एक बीएसटी बनाएं। रूट नोड (रूट-> राइट =इंसर्ट (70); ) और रूट के बाईं ओर (रूट-> लेफ्ट =इंसर्ट (30); ) में नोड्स को जोड़ने के लिए।

  • चर l और h किसी श्रेणी के न्यूनतम और अधिकतम मान को संग्रहीत करने के लिए उपयोग किए जाते हैं।

  • परिवर्तनीय गणना पेड़ के अंदर बीएसटी की गिनती को स्टोर करती है जो एल और एच के बीच की सीमा में होती है। प्रारंभ में 0.

  • फ़ंक्शन getBtreeCount(Btreenode* root, int Low, int high, int* count) BST की जड़ लेता है, रेंज की बाएँ और दाएँ सीमाओं और काउंट के पते को पैरामीटर के रूप में लेता है और प्रत्येक रिकर्सिव कॉल के लिए गिनती के मान को अपडेट करता है।

  • वर्तमान रूट के लिए जाँच करें कि क्या यह NULL है, यदि हाँ तो 1 लौटाएँ क्योंकि यह पेड़ का हिस्सा नहीं है।

  • वर्तमान नोड्स के लिए, इसके सभी बाएँ और दाएँ सबट्री नोड की जाँच करें कि क्या वे दी गई सीमा में हैं। पुनरावर्ती कॉल द्वारा getBtreeCount(root->left, Low, High, count); andgetBtreeCount(root->right, Low, High, count);

  • यदि दोनों सबट्री रेंज के बीच में हैं और करंट नोड भी रेंज में पड़ा है तो वर्तमान नोड पर रूट किया गया ट्री रेंज में है। वृद्धि की गिनती। अगर (बाएं और दाएं और&रूट->जानकारी>=कम &&रूट->जानकारी <=उच्च) और +**गिनती; वापसी 1.

  • अंत में गणना में सभी उप-वृक्षों की गणना के रूप में अद्यतन मूल्य होगा।

  • परिणाम गिनती में प्रिंट करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
// A BST node
struct Btreenode {
   int info;
   Btreenode *left, *right;
};
int getBtreeCount(Btreenode* root, int low, int high, int* count){
   // Base case
   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 for input
         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 of subtrees lying in range: " <<count;
   return 0;
}

आउटपुट

Count of subtrees lying in range: 3

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

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें यूनी-वैल्यू सबट्री की संख्या गिननी होगी। यहां यूनी-वैल्यू सबट्री इंगित करता है कि सबट्री के सभी नोड्स का मान समान है। तो, अगर इनपुट रूट की तरह है =[5,1,5,5,5,5,नल,5], तो आउटपुट 4 . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक फ़ंक्शन हल

  1. C++ में दी गई श्रेणी में स्थित BST नोड्स की गणना करें

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