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

C++ में दी गई श्रेणी में BST कुंजियाँ प्रिंट करें


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

बाइनरी सर्च ट्री एक पेड़ है जो इन 3 गुणों का पालन करता है -

  • लेफ्ट सबट्री में नोड के मान से कम मान वाले नोड होते हैं।

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

  • एक उपट्री का भी एक बाइनरी सर्च ट्री होना चाहिए। ट्री में किसी डुप्लीकेट नोड की अनुमति नहीं है।

उदाहरण ,

C++ में दी गई श्रेणी में BST कुंजियाँ प्रिंट करें

आइए विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं,

Input : k1 = 12 and k2 = 25.
Output : 15, 20, 24

पेड़ - C++ में दी गई श्रेणी में BST कुंजियाँ प्रिंट करें

स्पष्टीकरण - पेड़ को पार करने पर, सभी तत्वों का पता लगाया जाएगा और जो तत्व 12 से 25 की सीमा के बीच हैं, यानी नोड x के लिए, 12 x ≥ 25 मुद्रित किया जाएगा।

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

एल्गोरिदम

Step 1 : Compare the root node with the k1 and k2.
Step 2 : If root is greater than k1. Call left subtree for the search recursively.
Step 3 : If root is smaller than k2. Call right subtree for the search recursively.
Step 4 : If the root of the tree is in the range. Then print the root’s value.

उदाहरण

अब, इस एल्गोरिथम के आधार पर, समस्या को हल करने के लिए एक प्रोग्राम बनाते हैं।

#include<bits/stdc++.h>
using namespace std;
class node{
   public:
      int data;
      node *left;
      node *right;
};
void nodesInRange(node *root, int k1, int k2){
   if ( NULL == root )
      return;
   if ( k1 < root->data )
      nodesInRange(root->left, k1, k2);
   if ( k1 <= root->data && k2 >= root->data )
      cout<<root->data<<"\t";
   if ( k2 > root->data )
      nodesInRange(root->right, k1, k2);
}
node* insert(int data){
   node *temp = new node();
   temp->data = data;
   temp->left = NULL;
   temp->right = NULL;
   return temp;
}
int main(){
   node *root = new node();
   int k1 = 12, k2 = 25;
   root = insert(20);
   root->left = insert(10);
   root->right = insert(24);
   root->left->left = insert(8);
   root->left->right = insert(15);
   root->right->right = insert(32);
   cout<<”The values of node within the range are\t”;
   nodesInRange(root, k1, k2);
   return 0;
}

आउटपुट

The values of node within the range are 15 20 24.

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

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

  1. सी ++ में बीएसटी में नोड हटाएं

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है। हम एक कुंजी k लेंगे, और हमें दिए गए कुंजी k को BST से हटाना होगा, और अद्यतन BST को वापस करना होगा। तो अगर पेड़ जैसा है - और कुंजी k =3, तो आउटपुट ट्री होगा - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - रूट नोड को हटाने के लिए deleteR

  1. C++ में दिए गए नोड से k दूरी पर सभी नोड्स प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री, एक लक्ष्य नोड और एक पूर्णांक K दिया जाता है। हमें ट्री के सभी नोड्स को प्रिंट करना होता है जो लक्ष्य नोड से K की दूरी पर होते हैं। । बाइनरी ट्री एक विशेष पेड़ है जिसके प्रत्येक नोड में अधिकतम दो नोड (एक/दो/कोई नहीं) होते हैं। आइए समस्या को समझने के लिए एक उदाहरण