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

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

हमें नोड्स से बना एक बाइनरी सर्च ट्री दिया गया है और एक रेंज भी दी गई है और कार्य दिए गए रेंज में स्थित नोड्स की गिनती की गणना करना और परिणाम प्रदर्शित करना है।

बाइनरी सर्च ट्री (BST) एक ऐसा पेड़ है जिसमें सभी नोड नीचे बताए गए गुणों का पालन करते हैं -

  • किसी नोड के बाएँ उपप्रकार की कुंजी उसके पैरेंट नोड की कुंजी से कम या उसके बराबर होती है।

  • नोड के दाएँ उपप्रकार की कुंजी उसके पैरेंट नोड की कुंजी से बड़ी होती है।

इस प्रकार, BST अपने सभी उप-वृक्षों को दो खंडों में विभाजित करता है; लेफ्ट सबट्री और राइट सबट्री और को -

. के रूप में परिभाषित किया जा सकता है

left_subtree (कुंजी) नोड (कुंजी) ≤ right_subtree (कुंजी)

उदाहरण के लिए

इनपुट -

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

रेंज:[11, 40]

आउटपुट - गिनती है:5

स्पष्टीकरण -श्रेणी [11, 40] के बीच का नोड मान 14, 19, 27, 31 और 35 है, इसलिए दिए गए बाइनरी सर्च ट्री में कुल 5 नोड हैं।

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

  • डेटा, लेफ्ट पॉइंटर, राइट पॉइंटर वाले नोड की संरचना बनाएं और एक रेंज बनाएं

  • एक नया नोड डालने के लिए एक फ़ंक्शन बनाएं जिसे उपयोगकर्ता दर्ज करेगा।

  • किसी दी गई श्रेणी में स्थित नोड्स की गणना करने के लिए एक अन्य फ़ंक्शन बनाएं।

  • जांचें कि क्या रूट न्यूल है तो वापस लौटें

  • अब, IF रूट की जाँच करें-> डेटा =प्रारंभ और रूट-> डेटा =अंत फिर वापस लौटें 1.

  • अब, IF रूट-> डेटा <=उच्च &&रूट-> डेटा> =कम जांचें, फिर 1 + getCount (रूट-> लेफ्ट, एंड, स्टार्ट) + रिकर्सिवली_कॉल_काउंट_फंक्शन (रूट-> राइट, एंड, स्टार्ट)

    लौटाएं।
  • और अगर, रूट-> डेटा <एंड फिर रिकर्सिवली_कॉल_काउंट_फंक्शन (रूट-> राइट, एंड, स्टार्ट) पर लौटें

  • अन्यथा, रिकर्सिवली_कॉल_काउंट_फंक्शन (रूट-> लेफ्ट, एंड, स्टार्ट) पर लौटें

उदाहरण

#include<iostream>
using namespace std;
// A BST node
struct node{
   int data;
   struct node* left, *right;
};
// Utility function to create new node
node *newNode(int data){
   node *temp = new node;
   temp->data = data;
   temp->left = temp->right = NULL;
   return (temp);
}
int findcount(node *root, int low, int high){
   // Base case
   if (!root){
      return 0;
   }
   if (root->data == high && root->data == low){
      return 1;
   }
   // If current node is in range, then include it in count and
   // recur for left and right children of it
   if (root->data <= high && root->data >= low){
      return 1 + findcount(root->left, low, high) +
      findcount(root->right, low, high);
   }
   else if (root->data < low){
      return findcount(root->right, low, high);
   }
   // Else recur for left child
   else{
      return findcount(root->left, low, high);
   }
}
// main function
int main(){
   // Let us construct the BST shown in the above figure
   node *root = newNode(27);
   root->left = newNode(14);
   root->right = newNode(35);
   root->left->left = newNode(10);
   root->left->right = newNode(19);
   root->right->left = newNode(31);
   root->right->right = newNode(42);
   int low = 10;
   int high = 50;
   cout << "Count of nodes between [" << low << ", " << high
   << "] is " << findcount(root, low, high);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो हमें निम्न आउटपुट मिलेगा -

Count of nodes between [10, 50] is 7

  1. दिए गए पेड़ में नोड्स की गणना करें जिसका वजन सी ++ में दो की शक्ति है

    एक बाइनरी ट्री को देखते हुए इसके नोड्स के वजन के साथ। लक्ष्य उन नोड्स की संख्या का पता लगाना है जिनका वजन इस तरह है कि संख्या दो की शक्ति है। अगर वजन 32 है तो यह 25 है इसलिए इस नोड को गिना जाएगा। उदाहरण के लिए इनपुट मान डालने के बाद जो ट्री बनाया जाएगा वह नीचे दिया गया है - आउटपुट Count the nod

  1. C++ में पूर्ण ट्री नोड्स की गणना करें

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