#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
data;
struct
Node *left, *right;
};
struct
Node* newNode(
int
data)
{
struct
Node* newNode =
new
Node;
newNode->data = data;
newNode->left = newNode->right = NULL;
return
(newNode);
}
int
countUntil(Node* root,
int
& res)
{
if
(root == NULL)
return
0;
int
l = countUntil(root->left, res);
int
r = countUntil(root->right, res);
int
maxCount;
if
(root->data == 1)
maxCount = l + r + 1;
else
maxCount = l + r;
res = max(res, maxCount);
if
(root->data == 1)
return
max(l, r) + 1;
else
return
max(l, r);
}
int
findMaxCount(Node* root)
{
int
res = INT_MIN;
countUntil(root, res);
return
res;
}
int
main(
void
)
{
struct
Node* root = newNode(1);
root->left = newNode(0);
root->right = newNode(1);
root->left->left = newNode(1);
root->left->right = newNode(1);
root->left->right->left = newNode(1);
root->left->right->right = newNode(0);
cout << findMaxCount(root);
return
0;
}