Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

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


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

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

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

इनपुट

    10
    /  \
   /    \
  5     20
 / \   / \
1   7   1  5

आउटपुट

      70
    /   \
   82   45
  / \   / \
83 77  60 25

स्पष्टीकरण

यह प्रोग्राम सभी बड़े तत्वों के योग के साथ-साथ नोड के मूल मान के रूप में नोड्स के मान के साथ एक 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++ में एक बाइनरी ट्री में रूट से दिए गए नोड की दूरी ज्ञात करें

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

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

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