做了很久的一题,以我很不成熟的想法,模模糊糊的感觉到要用动态规划,可是一直无法抽象出子问题
后面通过慢慢尝试,画图,稍微有了点想法。
对于任何一条路径,他一定有个最”高“的节点(也就是这条路径中最接近二叉树根节点的)
对于这个最高节点而言,通过他的所有路径中最大的只有四种可能(节点自身,节点自身+左支值,节点自身+右支值,节点自身+左支值+右支值)
我们可以找到这四个中的最大值,但是比如节点自身+左支值这种值不方便取得,所以我们让函数的返回值直接就是这个值,也即是返回值为
(左+节,右加节,节)中的最大值,也就是左支的值或右支的值,代码如下:
class Solution {
public:
int result=-2147483648;
int maxPathSum(TreeNode *root) {
nodeSum(root);
return result;
}
int nodeSum(TreeNode *root){
int lval=0,rval=0;
if(root==NULL) return 0;
lval = nodeSum(root->left);
rval = nodeSum(root->right);
result = max(result,max(root->val,max(root->val+lval+rval,max(root->val+lval,root->val+rval))));
return max(root->val,max(root->val+lval,root->val+rval));
}
};