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

C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें


मान लीजिए, एक बाइनरी ट्री दिया गया है। इसमें अलग-अलग लेवल पर लीफ नोड्स हैं। एक और पॉइंटर दिया गया है, जो एक नोड को इंगित कर रहा है। हमें इंगित नोड से निकटतम लीफ नोड की दूरी ढूंढनी है। ट्री को नीचे जैसा मानें -

C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें

यहां लीफ नोड्स 2, -2 और 6 हैं। यदि पॉइंटर नोड -5 पर इंगित कर रहा है, तो -5 से निकटतम नोड्स दूरी 1 पर होंगे।

इसे हल करने के लिए, हम दिए गए नोड के साथ रूटेड सबट्री को पार करेंगे, और सबट्री में निकटतम लीफ ढूंढेंगे, फिर दूरी स्टोर करेंगे। अब रूट से शुरू करके ट्री को पार करें, यदि नोड x बाएं सबट्री में मौजूद है, तो दाएं सबट्री में खोजें, और इसके विपरीत।

उदाहरण

#include 
using namespace std;

class Node {
public:
    int data;
    Node *left, *right;
};

Node* getNode(int data) {
    Node* node = new Node;
    node->data = data;
    node->left = node->right = NULL;
    return node;
}

void getLeafDownward(Node *root, int level, int *minDist) {
    if (root == NULL)
        return ;
    if (root->left == NULL && root->right == NULL) {
        if (level < (*minDist))
            *minDist = level;
        return;
    }
    getLeafDownward(root->left, level+1, minDist);
    getLeafDownward(root->right, level+1, minDist);
}

int getFromParent(Node * root, Node *x, int *minDist) {
    if (root == NULL)
        return -1;
    if (root == x)
        return 0;
    int l = getFromParent(root->left, x, minDist);
    if (l != -1) {
        getLeafDownward(root->right, l+2, minDist);
        return l+1;
    }
    int r = getFromParent(root->right, x, minDist);
    if (r != -1) {
        getLeafDownward(root->left, r+2, minDist);
        return r+1;
    }
    return -1;
}

int minimumDistance(Node *root, Node *x) {
    int minDist = INT8_MAX;
    getLeafDownward(x, 0, &minDist);
    getFromParent(root, x, &minDist);
    return minDist;
}

int main() {
    Node* root = getNode(4);
    root->left = getNode(2);
    root->right = getNode(-5);
    root->right->left = getNode(-2);
    root->right->right = getNode(6);
    Node *x = root->right;
    cout << "Closest distance of leaf from " << x->data << " is: " << minimumDistance(root, x);
}

आउटपुट

Closest distance of leaf from -5 is: 1

  1. बाइनरी ट्री के वर्टिकल ऑर्डर ट्रैवर्सल में kवां नोड खोजें C++ में बाइनरी ट्री के वर्टिकल ऑर्डर ट्रैवर्सल में kवां नोड खोजें C++ में

    मान लीजिए हमारे पास एक बाइनरी ट्री और एक मान K है। कार्य वर्टिकल ऑर्डर ट्रैवर्सल में Kवें नोड को प्रिंट करना है। यदि ऐसा कोई नोड मौजूद नहीं है, तो -1 वापस करें। तो यदि ट्री नीचे जैसा है - वर्टिकल ऑर्डर ट्रैवर्सल इस तरह है - 4 2 1 5 6 3 8 7 9 तो यदि K = 3, तो परिणाम 1 होगा। दृष्टिकोण सरल है। हम वर्ट

  1. C++ में बाइनरी सर्च ट्री में न्यूनतम मान वाला नोड ज्ञात करें C++ में बाइनरी सर्च ट्री में न्यूनतम मान वाला नोड ज्ञात करें

    मान लीजिए हमारे पास एक बाइनरी सर्च ट्री है। हमें बाइनरी सर्च ट्री में न्यूनतम तत्व ढूंढना है। इसलिए यदि BST नीचे की तरह है: न्यूनतम तत्व 1 होगा। जैसा कि हम जानते हैं कि बायां उपट्री हमेशा छोटे तत्वों को धारण करता है। इसलिए यदि हम बाएं उपट्री के माध्यम से तब तक ट्रैवर्स करते हैं जब तक बायां NULL नही

  1. C++ प्रोग्राम: बाइनरी ट्री के नोड्स को प्रिंट करना जैसे ही वे लीफ नोड बनते हैं C++ प्रोग्राम: बाइनरी ट्री के नोड्स को प्रिंट करना जैसे ही वे लीफ नोड बनते हैं

    एक बाइनरी ट्री दिया गया है, हमें उसके लीफ नोड्स को प्रिंट करना है और फिर उन लीफ नोड्स को हटाना है और फिर तब तक दोहराना है जब तक ट्री में कोई नोड न बचे। उदाहरण तो समस्या का आउटपुट होना चाहिए - 6 7 9 13 14 3 4 2 1 दृष्टिकोण हमने एक ऐसा दृष्टिकोण अपनाया है जहां हम DFS लागू कर रहे हैं। एक अस्थायी म