import
java.util.LinkedList;
import
java.util.Queue;
import
java.util.Stack;
class
Node {
char
key;
Node left, right;
public
Node(
char
item)
{
key = item;
left = right =
null
;
}
}
class
BinaryTree
{
Node root;
BinaryTree(
char
key) { root =
new
Node(key); }
BinaryTree() { root =
null
; }
public
static
int
countbal(Node root)
{
Queue<Node> que =
new
LinkedList<>();
que.add(root);
int
ans =
0
;
while
(
true
)
{
Stack<Character> stk =
new
Stack<>();
boolean
flag =
true
;
int
len = que.size();
if
(len ==
0
) {
break
;
}
while
(len >
0
)
{
Node temp = que.remove();
if
(temp.key ==
'('
)
{
stk.push(
'('
);
}
else
{
if
(stk.size() >
0
&& stk.peek() ==
'('
)
{
stk.pop();
}
else
{
flag =
false
;
}
}
if
(temp.left !=
null
)
{
que.add(temp.left);
}
if
(temp.right !=
null
)
{
que.add(temp.right);
}
len--;
}
if
(flag && stk.size() >
0
)
{
ans +=
1
;
}
}
return
ans;
}
public
static
void
main(String[] args)
{
BinaryTree tree =
new
BinaryTree();
tree.root =
new
Node(
'('
);
tree.root.left =
new
Node(
'('
);
tree.root.right =
new
Node(
')'
);
tree.root.left.left =
new
Node(
'('
);
tree.root.left.right =
new
Node(
')'
);
tree.root.right.right =
new
Node(
'('
);
tree.root.left.left.left =
new
Node(
'('
);
tree.root.left.left.right =
new
Node(
'('
);
tree.root.right.right.left =
new
Node(
')'
);
tree.root.right.right.right =
new
Node(
')'
);
System.out.println(countbal(tree.root));
}
}