Question:
Given a binary tree root node and 2 node value, check if those 2 nodes are siblings.
Solution:
If we send the node value as 7 and 15, they are siblings
If we send the node value as 7 and 18 they are not siblings.
So the solution here is, for every node it can have at max 2 children.
Hence check the children of every node and check if it matches.
If matches, return true, else false.
Solution in C++
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
// structure to hold binary tree node
struct Node
{
int data;
Node *left, *right;
Node(int data)
{
this->data = data;
this->left = this->right = nullptr;
}
};
bool are_siblings(Node *node, int a, int b)
{
if (node == NULL)
{
return false;
}
return (node->left->data == a && node->right->data == b)
|| (node->left->data == b && node->right->data == a)
|| are_siblings(node->left, a, b)
|| are_siblings(node->right, a, b);
}
int main()
{
Node* root = nullptr;
/* Binary tree:
16
/ \
/ \
10 25
/ \ / \
/ \ / \
7 15 18 30
*/
root = new Node(16);
root->left = new Node(10);
root->right = new Node(25);
root->left->left = new Node(7);
root->left->right = new Node(15);
root->right->left = new Node(18);
root->right->right = new Node(30);
int child_1 = 7;
int child_2 = 15;
if (are_siblings(root, child_1, child_2))
{
cout<<child_1<< " and "<<child_2<<" are siblings "<<endl;
} else {
cout<<child_1 <<" and "<<child_2<<" are NOT siblings "<<endl;
}
return 0;
}
Output:
7 and 15 are siblings