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

C++ में BST के दो नोड्स के बीच अधिकतम तत्व


समस्या कथन

N तत्वों का एक ऐरे और दो पूर्णांक A, B दिए गए हैं जो दिए गए ऐरे से संबंधित हैं। arr[0] से arr[n-1] तक तत्व डालकर एक बाइनरी सर्च ट्री बनाएं। कार्य A से B तक के पथ में अधिकतम तत्व ढूंढना है।

उदाहरण

यदि ऐरे है {24, 23, 15, 36, 19, 41, 25, 35} तो हम BST को निम्नानुसार बना सकते हैं:

C++ में BST के दो नोड्स के बीच अधिकतम तत्व

यदि हम A = 19 और B = 41 मानते हैं तो इन दो नोड्स के बीच अधिकतम तत्व 41 है।

एल्गोरिदम

  • नोड A और B का लोएस्ट कॉमन एंसेस्टर (LCA) ढूंढें।
  • LCA और A के बीच अधिकतम नोड ढूंढें। इसे max1 कहें।
  • LCA और B के बीच अधिकतम नोड ढूंढें। इसे max2 कहें।
  • max1 और max2 का अधिकतम वापस करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;

struct node {
    int data;
    struct node* left;
    struct node* right;
};

node* createNode(int x) {
    node* p = new node();
    p->data = x;
    p->left = NULL;
    p->right = NULL;
    return p;
}

void insertNode(struct node* root, int x) {
    node* p = root, *q = NULL;
    while (p != NULL) {
        q = p;
        if (p->data < x) {
            p = p->right;
        } else {
            p = p->left;
        }
    }
    if (q == NULL) {
        p = createNode(x);
    } else {
        if (q->data < x) {
            q->right = createNode(x);
        } else {
            q->left = createNode(x);
        }
    }
}

int maxelpath(node* q, int x) {
    node* p = q;
    int mx = INT_MIN;
    while (p->data != x) {
        if (p->data > x) {
            mx = max(mx, p->data);
            p = p->left;
        } else {
            mx = max(mx, p->data);
            p = p->right;
        }
    }
    return max(mx, x);
}

int getMaximumElement(struct node* root, int x, int y) {
    node* p = root;
    while ((x < p->data && y < p->data) || (x > p->data && y > p->data)) {
        if (x < p->data && y < p->data) {
            p = p->left;
        } else if (x > p->data && y > p->data) {
            p = p->right;
        }
    }
    return max(maxelpath(p, x), maxelpath(p, y));
}

int main() {
    int arr[] = {24, 23, 15, 36, 19, 41, 25, 35};
    int a = 19, b = 41;
    int n = sizeof(arr) / sizeof(arr[0]);
    struct node* root = createNode(arr[0]);
    for (int i = 1; i < n; i++) insertNode(root, arr[i]);
    cout << "Maximum element = " << getMaximumElement(root, a, b) << endl;
    return 0;
}

आउटपुट

Maximum element = 41
  1. C++ में बाइनरी ट्री में दो दिए गए लेवल के बीच सभी नोड्स प्रिंट करना C++ में बाइनरी ट्री में दो दिए गए लेवल के बीच सभी नोड्स प्रिंट करना

    इस समस्या में, हमें एक बाइनरी ट्री और ट्री में दो लेवल दिए गए हैं (ऊपरी और निचला) और हमें ट्री के ऊपरी और निचले लेवल के बीच के सभी नोड्स प्रिंट करने हैं। बाइनरी ट्री बाइनरी ट्री एक विशेष ट्री है जिसके प्रत्येक नोड में अधिकतम दो नोड्स होते हैं (एक/दो/कोई नहीं)। उदाहरण ऊपरी - 1 निचला - 3 आउटपुट -

  1. बाइनरी ट्री के दो नोड्स के बीच की दूरी खोजें C++ में बाइनरी ट्री के दो नोड्स के बीच की दूरी खोजें C++ में

    मान लीजिए हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें दो नोड्स u और v के बीच की दूरी खोजनी है। मान लीजिए ट्री नीचे जैसा है - अब (4, 6) के बीच की दूरी = 4, पथ की लंबाई 4 है, (5, 8) के बीच की लंबाई = 5 आदि। इस समस्या को हल करने के लिए, हम LCA (निम्नतम सामान्य पूर्वज) खोजेंगे, फिर LCA से दो नोड

  1. C++ प्रोग्राम: बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ प्रिंट करना

    हमें एक बाइनरी ट्री दिया गया है जिसके नोड्स विशिष्ट हैं और उस बाइनरी ट्री के दो नोड्स दिए गए हैं जिनके बीच का पथ हम प्रिंट करना चाहते हैं। उदाहरण के लिए - हम नोड 140 से 211 के बीच का पथ प्रिंट करना चाहते हैं तो इसका आउटपुट होना चाहिए - Output: 140->3->10->211 विचार यह है कि रूट नोड्स से दो