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

C++ में उस ट्री के क्लोन में बाइनरी ट्री के कॉरेस्पॉन्डिंग नोड को ढूंढना


मान लीजिए हमारे पास दो बाइनरी ट्रीज़ original और cloned हैं और original ट्री में एक नोड target का रेफरेंस दिया गया है। क्लोन किया गया ट्री वास्तव में original ट्री की एक कॉपी है। हमें क्लोन किए गए ट्री में उसी नोड का रेफरेंस ढूंढना है।

तो अगर ट्री नीचे जैसा है और टारगेट 3 है, तो आउटपुट 3 होगा।

C++ में उस ट्री के क्लोन में बाइनरी ट्री के कॉरेस्पॉन्डिंग नोड को ढूंढना

इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे:

  • solve() नाम का एक मेथड डिफाइन करें, जो node1, node2 और target लेगा

  • अगर node1 नल है, तो नल लौटाएं

  • अगर node1 target है और node1 का वैल्यू node2 के वैल्यू के बराबर है, तो node2 लौटाएं

  • leftPart := solve(node1 का लेफ्ट, node2 का लेफ्ट, target)

  • rightPart := solve(node1 का राइट, node2 का राइट, target)

  • leftPart लौटाएं अगर leftPart नल नहीं है, अन्यथा rightPart

  • मेन मेथड से solve(original, cloned, target) कॉल करके लौटाएं

उदाहरण (C++)

बेहतर समझ के लिए निम्न इम्प्लीमेंटेशन देखें:

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

class TreeNode{
public:
    int val;
    TreeNode *left, *right;
    TreeNode(int data){
        val = data;
        left = right = NULL;
    }
};

void insert(TreeNode **root, int val){
    queue<TreeNode*> q;
    q.push(*root);
    while(q.size()){
        TreeNode *temp = q.front();
        q.pop();
        if(!temp->left){
            if(val != NULL)
                temp->left = new TreeNode(val);
            else
                temp->left = new TreeNode(0);
            return;
        } else {
            q.push(temp->left);
        }
        if(!temp->right){
            if(val != NULL)
                temp->right = new TreeNode(val);
            else
                temp->right = new TreeNode(0);
            return;
        } else {
            q.push(temp->right);
        }
    }
}

TreeNode *make_tree(vector<int> v){
    TreeNode *root = new TreeNode(v[0]);
    for(int i = 1; i<v.size(); i++){
        insert(&root, v[i]);
    }
    return root;
}

class Solution {
public:
    TreeNode* solve(TreeNode* node1, TreeNode* node2, TreeNode* target){
        if(!node1) return NULL;
        if(node1 == target && node1->val == node2->val) return node2;
        TreeNode* leftPart = solve(node1->left, node2->left, target);
        TreeNode* rightPart = solve(node1->right, node2->right, target);
        return leftPart? leftPart : rightPart;
    }
    TreeNode* getTargetCopy(TreeNode* original, TreeNode* cloned, TreeNode* target) {
        return solve(original, cloned, target);
    }
};

int main(){
    vector<int> v = {7,4,3,NULL,NULL,6,19};
    TreeNode *root = make_tree(v);
    TreeNode *cloned = make_tree(v);
    TreeNode *target = root->right; //वैल्यू 3 वाला नोड
    Solution ob;
    cout << (ob.getTargetCopy(root, cloned, target))->val;
}

इनपुट

[7,4,3,null,null,6,19] 3

आउटपुट

3

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

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

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

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

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

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