leetcode 124. 二叉树中的最大路径和 hard
题目描述:
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
解题思路:
我们遍历每个节点,计算以当前节点为终点的所有路径中的最长路径,当然可能只有当前节点一个(当以左右儿子终点的路最长路径都小于0的情况下)。
而二叉树中的最大路径和必定是某个节点它的左儿子为终点的最长路径left(或者不加,假如left小于0的话)加上以它的右儿子为终点的最长路径right(或者不加,假如right小于0的话)加上这个节点的值
代码:
class Solution {
public:
int maxPathSum(TreeNode* root) {
if(root==nullptr)
return 0;
int res=INT_MIN;
helper(root,res);
return res;
}
// 计算以root为终点的所有路径中的最长路径
int helper(TreeNode *root,int &res){
// 假如空节点,其最长路径为0
if(root==nullptr)
return 0;
int left=max(0,helper(root->left,res)); // 计算以左儿子为终点的最长路径,但是假如小于0的话,就不要了
int right=max(0,helper(root->right,res));
res=max(res,left+right+root->val);
return max(left,right)+root->val;
}
};