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

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


यहां हम एक दिलचस्प समस्या देखेंगे, जहां हम एक दिए गए बाइनरी सर्च ट्री (BST) में प्रत्येक नोड में उससे बड़े सभी मानों को जोड़ेंगे। प्रारंभिक और अंतिम ट्री नीचे दिखाए अनुसार दिखाई देंगे:


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

एल्गोरिदम

bstUpdate(root, sum) -

Begin
    if root is null, then stop
    bstUpdate(right of root, sum)
    sum := sum + value of root
    update root value using sum
    bstUpdate(left of root, sum)
End

उदाहरण

#include<iostream>
using namespace std;
class Node {
    public:
        int data;
        Node *left, *right;
};
Node *getNode(int item) {
    Node *newNode = new Node();
    newNode->data = item;
    newNode->left = newNode->right = NULL;
    return newNode;
}
void updateBST(Node *root, int *sum) {
    if (root == NULL)
        return;
    updateBST(root->right, sum); // दाएं सबट्री को अपडेट करें
    *sum = *sum + root->data;
    root->data = *sum; // रूट डेटा अपडेट करें
    updateBST(root->left, sum); // बाएं सबट्री को अपडेट करें
}
void BSTUpdate(Node *root) {
    int sum = 0;
    updateBST(root, &sum);
}
void inorder(Node *root) {
    if (root != NULL) {
        inorder(root->left);
        cout<data<<" ";
        inorder(root->right);
    }
}
Node* insert(Node* node, int data) {
    if (node == NULL)
        return getNode(data);
    if (data <= node->data) // बाएं जाएं
        node->left = insert(node->left, data);
    else // दाएं जाएं
        node->right = insert(node->right, data);
    return node;
}
int main() {
    int data[] = {50, 30, 20, 40, 70, 60, 80};
    int n = sizeof(data)/sizeof(data[0]);
    Node *root = NULL;
    for(int i = 0; i < n; i++) {
        root = insert(root, data[i]);
    }
    BSTUpdate(root);
    inorder(root);
}

आउटपुट

350 330 300 260 210 150 80

  1. C++ में दिए गए सेट में मौजूद हर नोड से पहुंच योग्य सभी नोड्स खोजें C++ में दिए गए सेट में मौजूद हर नोड से पहुंच योग्य सभी नोड्स खोजें

    मान लीजिए हमारे पास एक अनडायरेक्टेड ग्राफ और वर्टेक्स का एक सेट है; हमें दिए गए सेट में मौजूद हर वर्टेक्स से सभी पहुंच योग्य नोड्स खोजने हैं। यदि इनपुट ऐसा है: तो आउटपुट होगा [1,2,3] और [4,5] क्योंकि ये दो कनेक्टेड कंपोनेंट्स हैं। समाधान दृष्टिकोण nodes := ग्राफ में नोड्स की संख्या। आकार nodes+

  1. C++ में दिए गए नोड के सब-ट्री के सभी नोड्स का XOR C++ में दिए गए नोड के सब-ट्री के सभी नोड्स का XOR

    इस समस्या में, हमें एक n-ट्री दी गई है और कुछ क्वेरीज हैं जो ट्री के नोड्स हैं। हमारा कार्य दिए गए नोड द्वारा बने सब-ट्री के सभी नोड्स का XOR प्रिंट करना है। आइए एक उदाहरण से समस्या को समझते हैं, क्वेरीज - {1, 6, 5} आउटपुट - 0 0 5 व्याख्या - 1^6^3^2^4^7^5 6^2^4 5 इस समस्या को हल करने के लिए, हम

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

    समस्या विवरण एक बाइनरी सर्च ट्री (BST) दी गई है, प्रत्येक नोड को उसके मान और उससे बड़े सभी नोड्स के मानों के योग में बदलें। हल दृष्टिकोण रिवर्स इनऑर्डर ट्रैवर्सल (दाएं → नोड → बाएं) का उपयोग करें और एक चर में अब तक देखे गए नोड्स का योग बनाए रखें। प्रत्येक नोड के लिए, उसका मान वर्तमान योग में जोड़े