#include <bits/stdc++.h>
using
namespace
std;
class
Node
{
public
:
vector<Node *> children;
int
val;
Node(
int
v)
{
val = v;
children = {};
}
};
vector<
int
> postOrder(Node *root)
{
int
sum = 0;
int
valid = 1;
for
(Node *child : root->children)
{
vector<
int
> binTrees = postOrder(child);
if
(binTrees[1] == 0)
valid = 0;
sum += binTrees[0];
}
if
(valid == 1 && root->children.size() < 3)
{
sum++;
}
else
valid = 0;
return
{sum, valid};
}
int
binTreesGeneric(Node *root)
{
if
(root == NULL)
return
0;
return
postOrder(root)[0];
}
int
main()
{
Node *twenty =
new
Node(20);
Node *seven =
new
Node(7);
Node *seven2 =
new
Node(7);
Node *five =
new
Node(5);
Node *four =
new
Node(4);
Node *nine =
new
Node(9);
Node *one =
new
Node(1);
Node *two =
new
Node(2);
Node *six =
new
Node(6);
Node *eight =
new
Node(8);
Node *ten =
new
Node(10);
Node *three =
new
Node(3);
Node *mfour =
new
Node(11);
Node *zero =
new
Node(12);
three->children.push_back(mfour);
three->children.push_back(zero);
ten->children.push_back(three);
two->children.push_back(six);
two->children.push_back(seven2);
four->children.push_back(nine);
four->children.push_back(one);
four->children.push_back(five);
seven->children.push_back(ten);
seven->children.push_back(two);
seven->children.push_back(eight);
seven->children.push_back(four);
twenty->children.push_back(seven);
cout << (binTreesGeneric(twenty));
}