687. Longest Univalue Path

递归 ,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;
    }
}

你可能感兴趣的:(687. Longest Univalue Path)