Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may not pass through the root.
Note: The length of path between two nodes is represented by the number of edges between them.
Example 1:
Input:
5
/ \
4 5
/ \ \
1 1 5
Output:
2
Example 2:
Input:
1
/ \
4 5
/ \ \
4 4 5
Output:
2
Note: The given binary tree has not more than 10000 nodes. The height of the tree is not more than 1000.
int longestUnivaluePath(TreeNode* root) {
if(!root)return 0;
int cur = 0;
dfs(root,cur);
return cur;
}
int dfs(TreeNode* root,int& cur){
int l = root->left?dfs(root->left,cur):0;
int r = root->right?dfs(root->right,cur):0;
l=(root->left && root->left->val==root->val) ? l+1 : 0;
r=(root->right && root->right->val==root->val) ? r+1 : 0;
cur=max(cur,l+r);
return max(l,r);
}