/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { private: int maxPS = INT_MIN; int dfs(TreeNode* node) { if (!node) return 0; int leftMax = max(dfs(node->left), 0); // 计算左子树的最大路径和,如果是负值则取0 int rightMax = max(dfs(node->right), 0); // 计算右子树的最大路径和,如果是负值则取0 // 更新全局最大路径和 maxPS = max(maxPS, node->val + leftMax + rightMax); // 返回当前节点的单边最大路径和 return node->val + max(leftMax, rightMax); } public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型 */ int maxPathSum(TreeNode* root) { // write code here dfs(root); return maxPS; } };