/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int ans; //以r为根的到任意节点的path sum int maxdeep(TreeNode* r) { if(r==NULL) return 0; if(r->left==NULL&&r->right==NULL) { // 修正是叶子节点时候的ans值 // 叶子节点是没有左右子树的,因此就比较当前ans和叶子节点的大小就可以了。 ans = max(ans, r->val); return r->val; } else { //左子树 int maxleft = maxdeep(r->left); //右子树 int maxright = maxdeep(r->right); // 当前节点的最大path sum 到根节点为止。 int maxsum = r->val + max(maxleft, maxright); // 仅仅包含当前节点的可能性, 这样就表示了从r节点到所有节点的path sum 而不仅仅是到根节点的path sum, 因为包含了为负数的情况。 maxsum = max(maxsum, r->val); // 非叶子节点是有左右子树的,因此就比较两种方式,一种方式当前节点的path sum,另外一种是以当前节点为根节点的最大path sum。 ans = max(ans, maxsum); ans = max(ans, maxleft+maxright+r->val); return maxsum; } } int maxPathSum(TreeNode* root) { // 最大负数 ans = 0X80000000; int d = maxdeep(root); return ans; } };
Leetcode 124. 二叉树中的最大路径和
猜你喜欢
转载自www.cnblogs.com/randyniu/p/9227465.html
今日推荐
周排行