JAVA,这道题读懂题目远比做出题困难

binary-tree-maximum-path-sum

http://www.nowcoder.com/questionTerminal/da785ea0f64b442488c125b441a4ba4a

不知道是不是有的小伙伴一开始和我一样,题目都不是很理解。先上代码,后面我跟大家详细的分享一下我的思路。

class Solution {
    public int res = Integer.MIN_VALUE;
    public int maxPathSum(TreeNode root) {
        getMax(root);
        return res;
    }

    public int getMax(TreeNode root){
        if(root == null) return 0;
        int leftMax = Math.max(0,getMax(root.left));
        int rightMax = Math.max(0,getMax(root.right));
        //*1.--下面一行划重点--//
        res = Math.max(res,Math.max(root.val+Math.max(leftMax,rightMax),root.val+leftMax+rightMax));
        //*2--这一行也很重要--//
        return Math.max(leftMax,rightMax) + root.val;
    }
}

想法的基础就是dfs,深度遍历,根据题意我们要想清楚两件事情
1.节点可能是非负的,因词开始dfs的节点不一定是根节点,结束的节点也不一定是叶子结点
2.题目没有说一定要按照自顶向下的顺序遍历,也就是说还有一种情况是这样 root.left->root->root.right。这就需要我们找到左子树最大值,右子树最大值加上根。这样一个值。
最后就是比较这两种情况哪个更大,也就是代码中标记的1这一行。
*2这一行如果大家没有深入理解的话可能也会有一些疑惑,为什么返回的是Math.max(leftMax,rightMax) + root.val,而不是root.val+leftMax+rightMax。这个其实也需要大家好好的思考一下,我们这个函数getMax()的作用,只是找到root节点下的最大节点和!这点一定要搞清楚。不要被这一行代码
1迷惑住,这只是我们更新res的代码。2是dfs找最大值的方式,1适用于这道题。
如果大家还有疑惑,可以尝试自底向上的想法递推一下。应该问题就会想的更明白了。

全部评论
思考了一下,发现你的1可以精简为: res= Math.max(result,root.val+leftMax+rightMax); 因为leftMax和rightMax是非负的,所以root.val+leftMax+rightMax一定大于等于root.val+Math.max(leftMax+rightMax)
3 回复 分享
发布于 2021-01-05 20:55
题目有问题
1 回复 分享
发布于 2021-05-29 09:43
可以很到位,root.val+leftMax+rightMax这个地方很容易错,因为这样无法和上一层的父节点构成路径
点赞 回复 分享
发布于 2023-07-18 09:20 河南
这道题目确实没说清楚条件……
点赞 回复 分享
发布于 2021-07-28 10:03
题目读起来真拗口
点赞 回复 分享
发布于 2020-11-08 09:34
重点不在dfs,在于读懂题目意思,很强
点赞 回复 分享
发布于 2020-09-04 11:54
给你点个赞
点赞 回复 分享
发布于 2020-09-04 11:54
当然,*1是可以简化的。我po出这种写法是觉得这种大家看得也会更清楚一些。
点赞 回复 分享
发布于 2020-03-20 12:44

相关推荐

2025-12-15 14:25
云南大学 Java
lei22:入职可能会看学信网,最好别伪装,这个简历找实习肯定是够的,肯定会有收 28 届实习生的公司的,多投就行
点赞 评论 收藏
分享
最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
36
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务