#include<iostream>
using namespace std;
struct TreeNode {
TreeNode* left;
TreeNode* Right;
double value;
};
bool Equal(TreeNode *a, TreeNode *b) {
if (a == NULL || b == NULL) return false;
if (fabs(a->value - b->value) < 0.000001) {
return true;
}
else return false;
}
bool checkin(TreeNode *a, TreeNode *b) {
if (a == NULL&&b!=NULL) return false;
if (b == NULL) return true;
if (Equal(a, b)) {
return checkin(a->left,b->left)&&checkin(a->Right,b->Right);
}
else return false;
}
bool check(TreeNode *a,TreeNode *b) {
if (a == NULL || b == NULL) return false;
if (checkin(a, b)) return true;
else return check(a->left, b) || check(a->left, b);
}
int main() {
TreeNode *t = new TreeNode();
t->value = 1;
t->left = new TreeNode();
t->left->value = 2;
t->Right = new TreeNode();
t->Right->value = 3;
t->left->left = new TreeNode();
t->left->left->value = 4;
t->left->Right = new TreeNode();
t->left->Right->value = 5;
TreeNode *p = new TreeNode();
p->value = 3;
p->left = new TreeNode();
p->left->value = 4;
p->Right = new TreeNode();
p->Right->value = 5;
cout << (check(t,p)==true) << endl;
return 0;
}