【leetcode】binary-tree-maximum-path-sum

后序遍历;注意两个值,1.以该节点为最高节点的路径上所有节点的和;2.通过该节点(或者一直向下)孩子路径的最大值;

前者不需要保存,只是为了求解,每次跟最大值比较保留较大值即可,后者为了便于计算上层节点的为最高父节点的和,需要暂时保存;

开始时想错了,浪费了很长时间;后来想要保存上述两个值,但需要修改TreeNode,看过discussion上别人的代码,才写出来;

代码如下:

//2014年8月21日15:16:05
//2014年8月21日16:44:48
#include <iostream>

using namespace std;
struct TreeNode {
     int val;
     TreeNode *left;
     TreeNode *right;
     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
    int maxValue = 0;
    int maxPathSum(TreeNode *root) {
        maxValue = root->val;
        GetMaxChildValue(root);
        return maxValue;

    }
    int GetMaxChildValue(TreeNode *root)
    {
        int ret = 0;
        int leftChildValue = 0,rightChildValue = 0;

        if(root->left != NULL){
            leftChildValue = GetMaxChildValue(root->left);
        }
        if(root->right != NULL){
            rightChildValue = GetMaxChildValue(root->right);
        }
        int maxValue1 = max(maxValue,leftChildValue+rightChildValue+root->val);
        int maxValue2 = max(leftChildValue+root->val,rightChildValue+root->val);
        maxValue = max(maxValue1,maxValue2);
        ret = max(max(root->val,root->val+leftChildValue),root->val+rightChildValue);
        return ret;

    }

};
int main()
{
    struct TreeNode A(1);
    struct TreeNode B(-2);
    struct TreeNode C(3);
    A.left = &B;
    A.right = &C;
    Solution S;

    cout << S.maxPathSum(&A) << endl;

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值