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

C++ में दिए गए BST में प्रत्येक नोड में सभी बड़े मान जोड़ें?

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

BST समस्या विवरण में प्रत्येक नोड में सभी बड़े मान जोड़ें -

एक बाइनरी सर्च ट्री (बीएसटी) को देखते हुए, हमें प्रत्येक नोड में जोड़ने की जरूरत है, सभी बड़े मान नोड का योग।

C++ में दिए गए BST में प्रत्येक नोड में सभी बड़े मान जोड़ें?

स्पष्टीकरण

यह प्रोग्राम सभी बड़े तत्वों के योग के साथ-साथ नोड के मूल मान के रूप में नोड्स के मान के साथ एक BST को बाइनरी ट्री में बदल देगा।

बाइनरी सर्च ट्री समाधान में प्रत्येक नोड में सभी बड़े मान जोड़ें -

हम रिवर्स इनऑर्डर ट्रैवर्सल का उपयोग करते हैं (रीकर्सन को बाएं सबट्री के बजाय पहले दाएं सबट्री पर बुलाया जाता है) और अब तक ट्रैवर्स किए गए नोड्स के योग को स्टोर करने के लिए एक वैरिएबल बनाए रखते हैं।

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

उदाहरण

#include <iostream >
using namespace std;
struct node{
   int data;
   node *left;
   node *right;
};
node *newNode(int key){
   node *temp=new node;
   temp->left=NULL;
   temp->right=NULL;
   temp->data=key;
   return temp;
}
void Inorder(node *root){
   if(!root)
   return;
   Inorder(root->left);
   cout<<root->data<<" ";
   Inorder(root->right);
}
node *Insert(node *root,int key){
   if(!root)
   return newNode(key);
   if(key<root->data)
      root->left=Insert(root->left,key);
   else
      root->right=Insert(root->right,key);
   return root;
}
void RevInorderAdd(node *root,int &sum){
   if(!root)
   return;
   RevInorderAdd(root->right,sum);
   sum+=root->data;
   root->data=sum;
   RevInorderAdd(root->left,sum);
}
void AddGreater(node *root){
   int sum=0;
   RevInorderAdd(root,sum);
}
int main() {
   /* Let us create following BST
   10
   / \
   5 20
   / \ / \
   1 7 15 25 */
   node *root = NULL;
   root = Insert(root, 10);
   Insert(root, 20);
   Insert(root, 25);
   Insert(root, 15);
   Insert(root, 5);
   Insert(root, 7);
   Insert(root, 1);
   Inorder(root);
   cout<<endl;
   AddGreater(root);
   Inorder(root);
   cout<<endl;
   return 0;
}

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

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

  1. C++ में दिए गए लेवल ऑर्डर ट्रैवर्सल से BST का निर्माण करें

    मान लीजिए कि हमारे पास एक स्तर का ऑर्डर ट्रैवर्सल है। इस ट्रैवर्सल से। हमें पेड़ उत्पन्न करना है तो अगर ट्रैवर्सल [7, 4, 12, 3, 6, 8, 1, 5, 10] जैसा है, तो पेड़ जैसा होगा - इसे हल करने के लिए, हम पुनरावर्ती दृष्टिकोण का उपयोग करेंगे। पहला तत्व जड़ होगा। दूसरा तत्व लेफ्ट चाइल्ड होगा, और तीसरा तत्व

  1. C++ में एक बाइनरी ट्री में रूट से दिए गए नोड की दूरी ज्ञात करें

    मान लें कि हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें रूट और दूसरे नोड u के बीच की दूरी का पता लगाना है। मान लीजिए पेड़ नीचे जैसा है: अब बीच की दूरी (रूट, 6) =2, पथ की लंबाई 2, के बीच की दूरी (रूट, 8) =3 आदि। इस समस्या को हल करने के लिए, हम बाएँ और दाएँ सबट्री में नोड को खोजने के लिए एक