day6 二叉树最大路径和
那么可以定义一个函数GetMax,它的作用是获取以当前结点为起点的最大路径和,假设当前结点为node,那么以该结点为起点的路径最大和应为node->val、GetMax(node->left)+ node->val、GetMax(node->right)+ node->val、GetMax(node->left)+ GetMax(node->right)+ node->val中的最大值。如此只需要遍历整棵树,然后找出那个最大值即可。下面给出代码,请你务必理解GetMax的返回值。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int res = INT_MIN; //用一个全局变量记录最大的路径和
int GetMax(TreeNode* node){
if(node == NULL) return 0;
int leftMax = GetMax(node->left);
int rightMax = GetMax(node->right);
int temp = max(node->val,max(max(leftMax,rightMax)+node->val,
leftMax+rightMax+node->val));
//temp是以当前结点为起点的最大路径和
res = max(res,temp);
return 0 > max(leftMax,rightMax)? node->val:
max(leftMax,rightMax) + node->val;
//不要忘记GetMax函数真正的作用
}
int maxPathSum(TreeNode* root) {
// write code here
GetMax(root);
return res;
}
};