import
java.util.*;
class
GFG
{
static
class
Node
{
int
data;
Node left, right;
};
static
Node newNode(
int
data)
{
Node node =
new
Node();
node.data = data;
node.left = node.right =
null
;
return
(node);
}
static
boolean
CheckPerfectTree(Node root)
{
Queue<Node> q =
new
LinkedList<Node>();
q.add(root);
int
flag =
0
;
while
(q.size() >
0
)
{
Node temp = q.peek();
q.remove();
if
(temp.left !=
null
&& temp.right !=
null
)
{
if
(flag ==
1
)
return
false
;
else
{
q.add(temp.left);
q.add(temp.right);
}
}
else
if
(temp.left ==
null
&& temp.right ==
null
)
{
flag =
1
;
}
else
if
(temp.left ==
null
|| temp.right ==
null
)
return
false
;
}
return
true
;
}
public
static
void
main(String args[])
{
Node root = newNode(
7
);
root.left = newNode(
5
);
root.right = newNode(
6
);
root.left.left = newNode(
8
);
root.left.right = newNode(
1
);
root.right.left = newNode(
3
);
root.right.right = newNode(
9
);
root.right.right.right = newNode(
13
);
root.right.right.left = newNode(
10
);
if
(CheckPerfectTree(root))
System.out.printf(
"Yes"
);
else
System.out.printf(
"No"
);
}
}