递归 ,case有点多 别写错
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int max = 0;
public int longestUnivaluePath(TreeNode root) {
search(root);
return max;
}
private int search (TreeNode root)
{
if(root==null)return -1;
int sum = 0;
int left = search (root.left);
int right = search(root.right);
boolean leftEqual = false;
boolean rightEqual = false;
if(left!=-1&&root.left.val==root.val)
{
sum+=left+1;
leftEqual = true ;
}
if(right!=-1&&root.right.val==root.val)
{
sum+=right+1;
rightEqual = true;
}
if(sum>max)
{
max=sum;
}
if(leftEqual||rightEqual)
{
if(leftEqual&&rightEqual)
return left>right?left+1:right+1;
else if(leftEqual)
return left+1;
else
return right+1;
}
else
return 0;
}
}