看官方视频详解便会对题目有比较深的理解,下面说对代码的理解。这道题不需要你输入值,只需要你创建能计算最优路径的函数。
class Solution { //创建类
//创建一个私密的属性,代表最大路径所有元素之和
int maxsum;
//创建两个函数,第一个用来返回某节点最大的值,第二个要调用第一个函数然后求解那条最大路径的所有元素的和
public:
int maxformSum(TreeNode* root) {
if(root==nullptr)
return 0;//先判断该节点是否为0
int left_form=max(0,maxformSum(root->left));//利用递归找某根节点左边那一片线性路径的最大值
int right_form=max(0,maxformSum(root->right));//利用递归找某根节点右边那一片线性路径的最大值
int maxpath=root->val+left_form+right_form;//该根节点上面还有节点时,此节点的最大值
maxsum=max(maxsum,maxpath);//整个二叉树的最大路径和,要么是原来maxsum的值,要么是上面更新过的某一个根节点的值,若该根节点上面还有节点,则此值可能还可以变大
return maxpath;//返回该节点的最大路径和,与上面返回整个二叉树的最大路径和相区别,为什么有这样的区别,因为二叉树路径的最大和不一定经过根节点,所以需要一个变量可以记录所有节点的最大值。
}
//由于不能同时返回两个值所以再创一个函数调用第一个函数返回二叉树的最大路径和
int maxPathSum(TreeNode* root)
{
maxformSum(root);
return maxsum;
}
};