687. 最长同值路径

2019-03-12  本文已影响0人  calm_peng

注意:两个节点之间的路径长度由它们之间的边数表示。

示例 1:

输入:

              5
             / \
            4   5
           / \   \
          1   1   5
输出:

2
示例 2:

输入:

              1
             / \
            4   5
           / \   \
          4   4   5
输出:

2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。

这个是用递归解决,答案给的代码太美了。

/*讲真,这个代码的可以 写的可以吹一波




*/
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int ans;
    public int longestUnivaluePath(TreeNode root) {
        ans = 0;
        arrowLength(root);
        return ans;
    }
    public int arrowLength(TreeNode node){
        if(node == null)
            return 0;
        int left = arrowLength(node.left);
        int right = arrowLength(node.right);
        int arrowLeft = 0;
        int arrowRight = 0;
        
        if(node.left != null && node.left.val == node.val)
            arrowLeft =  left + 1 ;
        if(node.right != null && node.right.val == node.val)
            arrowRight = right + 1 ;
        ans = Math.max(ans,arrowLeft + arrowRight);
        return Math.max(arrowLeft,arrowRight);
        
    }
}

看起来没什么,你自己动手写,逻辑上没什么问题,但是写不到这么美。

ans = Math.max(ans,arrowLeft+arrowRight);

这一行包含了很多东西。几种可能都在这里面体现了。
先将
arrowLeft = 0 ,arroeRight = 0
后来的 都能用

ans = Math.max(ans,arrowLeft+arrowRight);

包括!

上一篇下一篇

猜你喜欢

热点阅读