import
java.util.*;
class
GFG
{
public
static
class
node {
int
data;
node left;
node right;
}
public
static
node newNode(
int
data)
{
node Node =
new
node();
Node.data = data;
Node.left =
null
;
Node.right =
null
;
return
(Node);
}
static
void
swap(node m, node n)
{
node temp = m;
m = n;
n = temp;
}
public
static
void
convert(node root)
{
if
(root==
null
)
return
;
convert(root.left);
convert(root.right);
swap(root.left, root.right);
}
public
static
int
checkIdentical(node p, node q)
{
Stack<node> st1=
new
Stack<>();
Stack<node> st2=
new
Stack<>();
int
count =
0
;
while
(p!=
null
|| !st1.empty()
&& q!=
null
|| !st2.empty()) {
if
(p!=
null
&& q!=
null
) {
st1.push(p);
st2.push(q);
p = p.left;
q = q.left;
}
else
{
p = st1.peek();
q = st2.peek();
st1.pop();
st2.pop();
if
(p.data != q.data)
count++;
p = p.right;
q = q.right;
}
}
return
count /
2
;
}
public
static
void
main(String[] args)
{
node root1 = newNode(
11
);
root1.left = newNode(
25
);
root1.right = newNode(
15
);
root1.left.left = newNode(
7
);
root1.left.right = newNode(
9
);
root1.right.left = newNode(
10
);
root1.right.right = newNode(
21
);
node root2 = newNode(
11
);
root2.left = newNode(
25
);
root2.right = newNode(
15
);
root2.left.left = newNode(
10
);
root2.left.right = newNode(
21
);
root2.right.left = newNode(
9
);
root2.right.right = newNode(
7
);
int
K =
4
;
convert(root1);
int
count = checkIdentical(root1, root2);
if
(count <= K
&& (K - count) %
2
==
0
)
System.out.println(
"Yes"
);
else
System.out.println(
"No"
);
}
}