题意:
给一颗二叉树,寻找一个路径,满足路径上的节点值的和最大。这个路径可以是任意起点和任意终点。
思路:
后序递归,在每个节点处将其左右节点作为路径结尾且和大于0的左右子路径连接,判断新路径的和是否是最大。然后返回以该节点为结尾的最大路径。
int fuc(TreeNode* root, int &res) {
if (!root)
return 0;
int l = max(fuc(root->left, res), 0), r = max(fuc(root->right, res), 0);
res = max(res, root->val + l + r);
return root->val + max(l, r);
}
int maxPathSum(TreeNode* root) {
int res = INT_MIN;
fuc(root, res);
return res;
}