给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3]
1
/ \
2 3
输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7]
-10
/
9 20
/
15 7
输出: 42
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
第一时间的思路是利用递归的分治思想,最大路径和的组成,分别考虑当前节点及其左右子树,思路没错,但是后面想的就比较偏,考虑到了当前节点root的正负、如果为正那么考虑左右子节点是否大于0,如果大于则表示左右子树之一或完全为路径和的成员;如果为负,则考虑到左右子树是否大于当前节点root,如果大于,那么可以将左右子树增加到当前路径和来,如果小于,那么表示当前节点就算加上左右节点也是负数,则不考虑左右子节点。这样考虑有很多细节错误,只跑了一半的测试用例。
参考别人的思路:
每个节点如果在最佳路径和中,那么就有两种情况:
- 当前节点+左和右子节点
- 当前节点+左或右子节点
依然还是递归的分治思想,分别求