#include <iostream>
using
namespace
std;
struct
Node {
int
data;
struct
Node *left, *right;
Node(
int
data)
{
this
->data = data;
left = right = NULL;
}
};
bool
ifNodeExists(
struct
Node* node,
int
key)
{
if
(node == NULL)
return
false
;
if
(node->data == key)
return
true
;
bool
res1 = ifNodeExists(node->left, key);
bool
res2 = ifNodeExists(node->right, key);
return
res1 || res2;
}
bool
ifSameSubTree(Node* root,
int
node1,
int
node2)
{
if
(root == NULL)
return
false
;
if
(ifNodeExists(root->left, node1)
&& ifNodeExists(root->left, node2)) {
return
true
;
}
else
if
(ifNodeExists(root->right, node1)
&& ifNodeExists(root->right, node2)) {
return
true
;
}
else
return
false
;
}
int
main()
{
struct
Node* root =
new
Node(0);
root->left =
new
Node(1);
root->left->left =
new
Node(3);
root->left->left->left =
new
Node(7);
root->left->right =
new
Node(4);
root->left->right->left =
new
Node(8);
root->left->right->right =
new
Node(9);
root->right =
new
Node(2);
root->right->left =
new
Node(5);
root->right->right =
new
Node(6);
int
node1 = 3, node2 = 8;
if
(ifSameSubTree(root, node1, node2))
cout <<
"YES"
;
else
cout <<
"NO"
;
return
0;
}