Leetcode124最大路径和

本文深入探讨了LeetCode上的经典题目——最大路径和问题,通过对比错误与正确的代码实现,详细解释了如何利用递归求解二叉树中最大路径和的算法思路,并强调了递归过程中局部变量的正确使用方法。

leetcode 124最大路径和 自己写的时候犯的错误

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

class Solution {
public:
    int maxPathSum(TreeNode* root) {
        pathsum(root);
        return totalm;
    }
private:
    int currm;
    int totalm = INT_MIN;
    int ls = 0,rs = 0;
    int pathsum(TreeNode* root){
        if(!root) return 0;
        ls = pathsum(root->left);
        cout<<"ls:"<<ls<<endl;
        rs = pathsum(root->right);
        cout<<"rs:"<<rs<<endl;
        currm = root->val+max(0,ls)+max(0,rs);
        totalm = max(currm,totalm);
        return max(ls,rs)+root->val;
    }
};

注意用递归求解, 递归的分量不能写到递归函数外面,当作全局变量。
就是代码中int ls = 0,int rs = 0;
这句话应该放到 int pathsum函数体中,因为ls,rs都是当前递归函数的暂时状态,返回给上一级的时候,需要回收,如果写到pathsum函数外面,那么ls和rs就只会记住递归最深处的ls和rs状态。

class Solution {
public:
    int maxPathSum(TreeNode* root) {
        pathsum(root);
        return totalm;
    }
private:
    int currm;
    int totalm = INT_MIN;
    int pathsum(TreeNode* root){
        if(!root) return 0;
        int ls = pathsum(root->left);
        int rs = pathsum(root->right);
        currm = root->val+max(0,ls)+max(0,rs);
        totalm = max(currm,totalm);
        return max(ls,rs)+root->val;
    }
};

正确代码如上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值