687. 最长同值路径


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

示例 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);

包括!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 依偎在你身边像个孩子带你到世界的每一个角落沙漠之舟大海茫然山峰之巅 你肆意绽放美丽动人殚精竭虑哄你安然又或者拌嘴吵...
    彦子枫阅读 296评论 8 9
  • 今天我去写英语的了,让我后悔的一件事是我这几天都没有背过单词呢。
    张睿姝阅读 227评论 0 0
  • 姓名:施千惠 书名:《阿笨猫》上 时间:1小时30分钟 读书心得:不能被言语诱惑,而要把物体的作用 和危险程度,再...
    施千惠阅读 156评论 0 0