LeetCode687-最长同值路径

127 阅读1分钟

leetcode-cn.com/problems/lo…

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int ans = 0;
    public int longestUnivaluePath(TreeNode root) {
        arrowLength(root);
        return ans;
    }
    
    //arrowLength 为从节点 x 延伸出的最长箭头的长度
    //因为arrowLength 会遍历所有节点,所以我们可以计算出整棵树的最长同值路径
    private int arrowLength(TreeNode x){
        if(x==null) return 0;
        if(x.left==null && x.right==null) return 0;
        int arrowLeft = arrowLength(x.left);
        int arrowRight = arrowLength(x.right);
        //第一个箭头向左指
        int arrow2Left = (x.left==null? 0 : (x.left.val==x.val? 1+arrowLeft : 0));
        //第一个箭头向右指
        int arrow2Right = (x.right==null? 0 : (x.right.val==x.val? 1+arrowRight : 0));
        
        ans = Math.max(ans, arrow2Left + arrow2Right);
        return Math.max(arrow2Left, arrow2Right);
    }
    
}