Leetcode124最大路径和

    技术2025-07-21  9

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

    正确代码如上。

    Processed: 0.010, SQL: 9