import
java.io.*;
import
java.util.*;
class
Node {
public
int
data;
public
Node left, right;
public
Node(
int
item)
{
data = item;
left = right =
null
;
}
}
class
GFG {
public
Node root;
public
boolean
checkMonotonic(Node root)
{
int
[] sequenceArray = getLevelOrderArray(root);
boolean
increasing =
true
;
boolean
decreasing =
true
;
for
(
int
i =
0
; i < sequenceArray.length -
1
; ++i) {
if
(sequenceArray[i] > sequenceArray[i +
1
])
increasing =
false
;
if
(sequenceArray[i] < sequenceArray[i +
1
])
decreasing =
false
;
}
return
increasing || decreasing;
}
public
int
[] getLevelOrderArray(Node root)
{
int
h = height(root);
int
i;
List<Integer> retVal =
new
ArrayList<>();
for
(i =
1
; i <= h; i++) {
List<Integer> currentLevel =
new
ArrayList<>();
var currentLevelOrder
= getCurrentLevel(root, i, currentLevel)
.toArray(
new
Integer[
0
]);
StringBuilder sb =
new
StringBuilder();
for
(
int
j =
0
; j < currentLevelOrder.length;
j++) {
sb.append(currentLevelOrder[j]);
}
retVal.add(Integer.parseInt(sb.toString(),
2
));
}
int
[] retArr =
new
int
[retVal.size()];
for
(
int
j =
0
; j < retVal.size(); j++) {
retArr[j] = retVal.get(j);
}
return
retArr;
}
public
int
height(Node root)
{
if
(root ==
null
) {
return
0
;
}
else
{
int
lheight = height(root.left);
int
rheight = height(root.right);
if
(lheight > rheight) {
return
(lheight +
1
);
}
else
{
return
(rheight +
1
);
}
}
}
public
List<Integer>
getCurrentLevel(Node root,
int
level,
List<Integer> currentLevelOrder)
{
if
(root ==
null
) {
return
currentLevelOrder;
}
if
(level ==
1
) {
currentLevelOrder.add(root.data);
}
else
if
(level >
1
) {
getCurrentLevel(root.left, level -
1
,
currentLevelOrder);
getCurrentLevel(root.right, level -
1
,
currentLevelOrder);
}
return
currentLevelOrder;
}
public
static
void
main(String[] args)
{
GFG tree =
new
GFG();
tree.root =
new
Node(
0
);
tree.root.left =
new
Node(
0
);
tree.root.right =
new
Node(
1
);
tree.root.left.left =
new
Node(
1
);
tree.root.right.left =
new
Node(
0
);
tree.root.right.left.left =
new
Node(
1
);
tree.root.right.left.right =
new
Node(
1
);
boolean
ans = tree.checkMonotonic(tree.root);
if
(ans)
System.out.print(
"Yes"
);
else
System.out.print(
"No"
);
}
}