#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
val;
struct
Node *left, *right;
};
int
length(Node *node,
int
*ans) {
if
(!node)
return
0;
int
left = length(node->left, ans);
int
right = length(node->right, ans);
int
Leftmax = 0, Rightmax = 0;
if
(node->left && node->left->val == node->val)
Leftmax += left + 1;
if
(node->right && node->right->val == node->val)
Rightmax += right + 1;
*ans = max(*ans, Leftmax + Rightmax);
return
max(Leftmax, Rightmax);
}
int
longestSameValuePath(Node *root) {
int
ans = 0;
length(root, &ans);
return
ans;
}
Node *newNode(
int
data) {
Node *temp =
new
Node;
temp->val = data;
temp->left = temp->right = NULL;
return
temp;
}
int
main() {
Node *root = NULL;
root = newNode(4);
root->left = newNode(4);
root->right = newNode(4);
root->left->left = newNode(4);
root->left->right = newNode(9);
root->right->right = newNode(5);
cout << longestSameValuePath(root);
return
0;
}