使用 val 来记录全局最大路径和。lmr表示路径:left->middle->right,return表示路径:由左/右子树经过当前节点向上走。
1 2 3 4 5 6 7 8 9 10 11 12 13
inthmax(TreeNode* root, int &val){ if (root == nullptr)return0; int left = max(hmax(root->left, val),0); int right = max(hmax(root->right, val),0); int lmr = root->val + left + right; val = max(val,lmr); return root->val + max(left, right); } intmaxPathSum(TreeNode* root){ int val = INT_MIN; int k= hmax(root, val); return max(k, val); }