题目描述:
题解:二叉树的递归遍历求解。每个节点递归的结果为该节点的最大贡献,具体解释看代码。
AC代码:
class Solution { public: int del(TreeNode* root) { if(root == NULL) return 0; int tmp = root->val; int l = del(root->left); int r = del(root->right); ans = max(ans,max(tmp+max(l,r),tmp+l+r)); // 这里还多了一种左、右子树都取的情况,意在当前节点作为路径中的最高祖先 ans = max(ans,tmp); return max(tmp,tmp+max(l,r));// 左、右子树取一个贡献较大的与当前节点的值相加 以及 只取当前节点两种情况 } int maxPathSum(TreeNode* root) { ans = INT_MIN; del(root); return ans; } private: int ans; };