Leetcode:Binary Tree Maximum Path Sum菜鸟解法

来源:互联网 发布:linux系统解压命令 编辑:程序博客网 时间:2024/06/06 02:45

做了很久的一题,以我很不成熟的想法,模模糊糊的感觉到要用动态规划,可是一直无法抽象出子问题

后面通过慢慢尝试,画图,稍微有了点想法。

对于任何一条路径,他一定有个最”高“的节点(也就是这条路径中最接近二叉树根节点的)

对于这个最高节点而言,通过他的所有路径中最大的只有四种可能(节点自身,节点自身+左支值,节点自身+右支值,节点自身+左支值+右支值)

我们可以找到这四个中的最大值,但是比如节点自身+左支值这种值不方便取得,所以我们让函数的返回值直接就是这个值,也即是返回值为

(左+节,右加节,节)中的最大值,也就是左支的值或右支的值,代码如下:


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));    }};


0 0
原创粉丝点击