मान लीजिए कि हमारे पास एक बाइनरी ट्री है, रूट नोड 0 की गहराई पर मौजूद है, और प्रत्येक गहराई k नोड के बच्चे गहराई k+1 पर हैं।
यहां एक बाइनरी ट्री के दो नोड्स को चचेरे भाई कहा जाता है यदि उनकी गहराई समान है, लेकिन उनके माता-पिता अलग हैं।
पेड़ के सभी मूल्य अद्वितीय होंगे, और पेड़ में दो अलग-अलग नोड्स के मान x और y होंगे। हमें यह जांचना होगा कि x और y के मानों के अनुरूप नोड चचेरे भाई हैं या नहीं।
तो, अगर इनपुट पसंद है

x =5, y =4, तो आउटपुट सही होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक नक्शा उम परिभाषित करें
-
एक कतार को परिभाषित करें q
-
q में रूट डालें
-
उम [एक्स]:=उम [वाई]:=शून्य
-
जबकि (नहीं q खाली है), करें -
-
qSize :=q का आकार
-
जबकि qSize> 0 तब (qSize को 1 से घटाएं), −
. करें-
cur :=q का पहला तत्व
-
q से तत्व हटाएं
-
यदि बाईं ओर कर्व मौजूद है, तो -
-
यदि उम में वक्र के बाईं ओर का मान है, तो
-
उम [कर के बाईं ओर का मान] :=वक्र
-
-
अन्यथा
-
क्यू में बाईं ओर डालें q
-
-
अगर उम में वक्र के अधिकार का मूल्य है, तो
-
उम [वक्र के अधिकार का मूल्य] :=वक्र
-
-
अन्यथा
-
क्यू में दायीं ओर डालें
-
-
-
अगर um[x] या um[y] गैर-शून्य है, तो -
-
यदि um[x] 0 है या um[y] 0 है या um[x] um[y] के समान है, तो -
-
झूठी वापसी
-
-
अन्यथा
-
सही लौटें
-
-
-
-
-
झूठी वापसी
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
class TreeNode {
public:
int val;
TreeNode *left, *right;
TreeNode(int data) {
val = data;
left = NULL;
right = NULL;
}
};
class Solution {
public:
bool isCousins(TreeNode *root, int x, int y) {
unordered_map<int, TreeNode *> um;
queue<TreeNode *> q;
q.push(root);
um[x] = um[y] = NULL;
while (!q.empty()) {
int qSize = q.size();
while (qSize-- > 0) {
auto cur = q.front();
q.pop();
if (cur->left && cur->left->val != 0)
if (um.count(cur->left->val))
um[cur->left->val] = cur;
else
q.push(cur->left);
if (cur->right && cur->right->val != 0)
if (um.count(cur->right->val))
um[cur->right->val] = cur;
else
q.push(cur->right);
}
if (um[x] or um[y])
if (!um[x] or !um[y] or um[x] == um[y])
return false;
else
return true;
}
return false;
}
};
main() {
Solution ob;
TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2); root->right = new TreeNode(3);
root->left->right = new TreeNode(4); root->right->right = new TreeNode(5);
cout << (ob.isCousins(root, 5, 4));
} इनपुट
TreeNode *root = new TreeNode(1); root->left = new TreeNode(2); root->right = new TreeNode(3); root->left->right = new TreeNode(4); root->right->right = new TreeNode(5); cout << (ob.isCousins(root, 5, 4));
आउटपुट
1