Java:
class Solution {
public int longestUnivaluePath(TreeNode root) {
int[] res=new int[1];
if(root != null) dfs(root,res);
return res[0];
}
private int dfs(TreeNode node,int[] res){
int l=node.left!=null?dfs(node.left,res):0;
int r=node.right!=null?dfs(node.right,res):0;
int lres=node.left!=null&&node.val==node.left.val?l+1:0;
int rres=node.right!=null&&node.val==node.right.val?r+1:0;
res[0]=Math.max(res[0],lres+rres);
return Math.max(lres,rres);
}
}
Python
class Solution:
def longestUnivaluePath(self, root):
"""
:type root: TreeNode
:rtype: int
"""
res=[0]
def dfs(node):
if not node:
return 0
l,r=dfs(node.left),dfs(node.right)
lres=(l+1) if node.left and node.left.val==node.val else 0
rres=(r+1) if node.right and node.right.val==node.val else 0
res[0]=max(res[0],lres+rres)
return max(lres,rres)
dfs(root)
return res[0]