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 hereGetMax(root);return res;}};
