मुझे एक बीएसटी के प्रत्येक नोड की तुलना दूसरे बीएसटी के सभी नोड्स से करने की आवश्यकता है।

इसी तरह आप किसी सरणी में तुलना कैसे करेंगे:

string arr[10];
string arr2[10];

for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        compare(arr[j], arr2[i]);
    }
}

लेकिन लूप के लिए बाहरी के बजाय आप bst1 में ट्रैवर्स कर रहे हैं, और लूप के लिए आंतरिक के बजाय, आप bst2 में ट्रैवर्स कर रहे हैं। फिर bst2 के सभी नोड्स के साथ bst1 के नोड की तुलना करना, फिर bst1 के अगले नोड पर जाना और bst2 के सभी नोड्स के साथ तुलना करना आदि।

ट्रैवर्सल को कार्यान्वित करने के तरीके के आसपास मेरे सिर को लपेटने के लिए प्रतीत नहीं होता है। किसी भी सहायता की सराहना की जाएगी

0
Esfandyar Ali Khan 30 पद 2019, 02:56

1 उत्तर

सबसे बढ़िया उत्तर

विचार traverse को Tree1 के रूट नोड पर कॉल करना है और इसमें प्रत्येक नोड के लिए, इसे दूसरे फ़ंक्शन compare को पास करना है, जिसे Tree2 के रूट नोड पर कहा जाता है और इसमें प्रत्येक नोड के साथ पारित नोड की तुलना करता है।

#include <iostream>

struct Node
{
    int val;
    Node *left, *right;
};

void compare(Node *curr2, Node *curr1)
{
    if (curr2 == nullptr)
        return;

    compare(curr2->left, curr1);
    if (curr2->val == curr1->val)       // replace with your comparison function
        cout << "Match found for " << curr1->val << endl;
    compare(curr2->right, curr1);
}

void traverse(Node *curr1, Node *root2)
{
    if (curr1 == nullptr)
        return;

    traverse(curr1->left, root2);
    compare(root2, curr1);
    traverse(curr1->right, root2);
}

int main()
{
    Node *root1, *root2;
    traverse(root1, root2);
}
0
srt1104 30 पद 2019, 01:46