leetcode Binary Tree Maximum Path Sum

此题要求出二叉树中路径和最大的数值,思路如下:

对于一棵子树,其路径有三种情况

1,当前父节点

2,左结点-->当前父节点--> 祖父结点

3,右结点-->当前父节点-->祖父节点

该三种情况取最大值作为中间值返回给调用函数


需要特别注意的是:对于“左结点-->当前父节点-->右结点”,该路径值与上述三种情况的最大值作比较保存较大的作为中间值,

且注意此种情况不能折回到当前父节点再往上走,因为题目不允许折返情况!



代码 C++

class Solution {
public:
    int maxPathSum(TreeNode *root) {

           int maxSum = (numeric_limits<int>::min)();
           maxPathSumHelper(root, maxSum);
           
           // 程序最终结果是maxSum
           return maxSum;
    }
    //maxSum为引用传递
    int maxPathSumHelper(TreeNode *root, int &maxSum)
    {
        if(root==NULL)
            return 0;

        int leftMax = maxPathSumHelper(root->left, maxSum);
        int rightMax = maxPathSumHelper(root->right, maxSum);
            
        int throughtRoot = root->val + leftMax + rightMax;

        int maxThroughRootToParent = max(root->val, max(leftMax, rightMax)+root->val);
        
        maxSum = max(maxSum, max(throughtRoot, maxThroughRootToParent));
                                                                                                                                         //注意返回值是maxThroughRootToParent
        return  maxThroughRootToParent;
        
    }

    
};







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值