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

C++ में दो बाइनरी ट्री को मर्ज करने का प्रोग्राम


मान लीजिए हमारे पास दो बाइनरी ट्री हैं और जब हम उनमें से एक को दूसरे पर रखते हैं, तो कुछ नोड्स ओवरलैप होते हैं जबकि अन्य नहीं। हमें उन्हें एक नए बाइनरी ट्री में मर्ज करना है। मर्ज नियम यह है कि यदि दो नोड्स ओवरलैप करते हैं, तो उनके मानों को जोड़कर मर्ज किए गए नोड का नया मान बनाया जाता है। अन्यथा, गैर-खाली नोड को नए ट्री के नोड के रूप में उपयोग किया जाता है।

उदाहरण

यदि ट्री निम्नलिखित हैं:

C++ में दो बाइनरी ट्री को मर्ज करने का प्रोग्राम

C++ में दो बाइनरी ट्री को मर्ज करने का प्रोग्राम

तो आउटपुट होगा:

C++ में दो बाइनरी ट्री को मर्ज करने का प्रोग्राम

समाधान दृष्टिकोण

इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  • solve() विधि दो ट्री नोड्स n1 और n2 लेती है।
  • यदि n1 खाली है और n2 गैर-खाली है, तो n2 लौटाएं।
  • यदि n2 खाली है और n1 गैर-खाली है, तो n1 लौटाएं।
  • यदि दोनों खाली हैं, तो null लौटाएं।
  • n1 का मान := n1 का मान + n2 का मान।
  • n1 का बायाँ := solve(n1 का बायाँ, n2 का बायाँ)।
  • n1 का दायाँ := solve(n1 का दायाँ, n2 का दायाँ)।
  • n1 लौटाएं।

C++ कार्यान्वयन

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

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

void inord(TreeNode *root) {
    if (root != NULL) {
        inord(root->left);
        cout << root->val << " ";
        inord(root->right);
    }
}

class Solution {
public:
    TreeNode* solve(TreeNode* n1, TreeNode* n2) {
        if (!n1 && n2)
            return n2;
        else if (!n2 && n1)
            return n1;
        else if (!n1 && !n2)
            return NULL;
        
        n1->val += n2->val;
        n1->left = solve(n1->left, n2->left);
        n1->right = solve(n1->right, n2->right);
        return n1;
    }
};

int main() {
    TreeNode *root1 = new TreeNode(1);
    root1->left = new TreeNode(3);
    root1->right = new TreeNode(2);
    root1->left->left = new TreeNode(5);
    
    TreeNode *root2 = new TreeNode(2);
    root2->left = new TreeNode(1);
    root2->right = new TreeNode(3);
    root2->left->right = new TreeNode(4);
    root2->right->right = new TreeNode(7);
    
    Solution ob;
    TreeNode *root_res = ob.solve(root1, root2);
    inord(root_res);
    return 0;
}

इनपुट

TreeNode *root1 = new TreeNode(1); 
root1->left = new TreeNode(3); 
root1->right = new TreeNode(2); 
root1->left->left = new TreeNode(5); 
TreeNode *root2 = new TreeNode(2); 
root2->left = new TreeNode(1); 
root2->right = new TreeNode(3); 
root2->left->right = new TreeNode(4); 
root2->right->right = new TreeNode(7);

आउटपुट

5 4 4 3 5 7
  1. C++ में दो बाइनरी ट्री को मर्ज करना C++ में दो बाइनरी ट्री को मर्ज करना

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

  1. C++ में दो बाइनरी ट्री में पहला गैर-मेल खाने वाला पत्ता ज्ञात करें C++ में दो बाइनरी ट्री में पहला गैर-मेल खाने वाला पत्ता ज्ञात करें

    मान लीजिए हमारे पास दो बाइनरी ट्री हैं। हमें दोनों ट्री का पहला पत्ता ढूंढना है, जो मेल नहीं खाता। यदि कोई गैर-मेल खाने वाले पत्ते नहीं हैं, तो कुछ भी प्रदर्शित न करें। यदि ये दो ट्री हैं, तो पहला गैर-मेल खाने वाले पत्ते 11 और 15 हैं। यहां हम स्टैक का उपयोग करके दोनों ट्री के पुनरावृत्त प्रीऑर्डर ट

  1. C++ में बाइनरी खोज प्रोग्राम C++ में बाइनरी खोज प्रोग्राम

    बाइनरी खोज क्या है? बाइनरी खोज (आधा-अंतराल खोज) एक खोज एल्गोरिदम है जो क्रमबद्ध सरणी में लक्ष्य मान की स्थिति ढूंढता है। यह लक्ष्य मान की तुलना मध्य तत्व से करता है और खोज स्थान को आधा कर देता है। मुख्य बिंदु केवल क्रमबद्ध सरणी पर काम करता है समय जटिलता: O(log n) दुनिया के सभी नाम क्रमबद्ध हों तो