思路:最大路径和的产生:左子树的单路径、右子树的单路径、左右子树的单路径和根节点值这三者之一。因此,先用两个变量存储左右子树的单路径(单路径就是只有从下到上的一条路径,没有左右)的最大和,分别取最大值即可。需要注意的是,取某条单路径的最大和的时候,如果某子树单路径之和加上根节点的值比根节点小,那么该子树的单路径之和直接舍弃。
class Solution { public: int max_value = -32768; int maxPathSum(TreeNode* root) { return max(max_value,func(root)); } int func(TreeNode* root){ if(!root)return 0; int left = func(root->left); int right = func(root->right); max_value = max(left + root->val + right, max_value); return max(left + root->val, max(right + root->val, root->val)); } };