import
java.io.*;
import
java.util.*;
class
GFG {
static
class
Node {
int
key;
Node left, right;
Node(
int
key)
{
this
.key = key;
this
.left =
this
.right =
null
;
}
}
static
class
pair {
Node node;
int
level;
pair(Node node,
int
leve)
{
this
.node = node;
this
.level = level;
}
}
static
boolean
isSorted(Node root,
int
level)
{
if
(root ==
null
) {
return
true
;
}
int
prevVal = Integer.MIN_VALUE;
int
currLevel;
Node currNode;
Queue<pair> q =
new
ArrayDeque<pair>();
q.add(
new
pair(root,
0
));
while
(!q.isEmpty()) {
pair temp = (pair)q.peek();
currNode = temp.node;
currLevel = temp.level;
q.remove();
if
(currLevel == level) {
if
(prevVal <= currNode.key) {
prevVal = currNode.key;
}
else
{
return
false
;
}
}
if
(currNode.left !=
null
) {
q.add(
new
pair(currNode.left, currLevel -
1
));
}
if
(currNode.right !=
null
) {
q.add(
new
pair(currNode.right,
currLevel +
1
));
}
}
return
true
;
}
public
static
void
main(String[] args)
{
Node root =
new
Node(
1
);
root.left =
new
Node(
2
);
root.right =
new
Node(
5
);
root.left.left =
new
Node(
7
);
root.left.right =
new
Node(
4
);
root.right.right =
new
Node(
6
);
int
level = -
1
;
if
(isSorted(root, level) ==
true
) {
System.out.print(
"Yes"
);
}
else
{
System.out.print(
"No"
);
}
}
}