Binary Tree Maximum Path Sum
Binary Tree Maximum Path Sum
Total Accepted: 55016 Total Submissions: 246213 Difficulty: Hard
Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
设最大路径和为sum , 那么sum = max(sum,左子树根出发的最大路径和+根结点的值+右子树根出发的最大路径和);
根据这个式子写成递归式就可以了
有一点需要注意,如果从左右子树根出发的最大路径和为负数,那么将其值置0,因为根的值+从左右子树根出发的最大路径和 一定会小于根的值
/** * 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 maxPathSum(TreeNode *root) { int maxPath = INT_MIN; maxPathWithNode(root,maxPath); return maxPath; } int maxPathWithNode(TreeNode* node,int& maxPath){ if(!node) return 0; int l = max(0,maxPathWithNode(node->left,maxPath)); int r = max(0,maxPathWithNode(node->right,maxPath)); maxPath = max(maxPath,l+r+node->val); // cout<<"node->val="<<node->val<<" l="<<l<<" r="<<r<<" maxPath="<<maxPath<<endl; return max(l,r)+node->val; } }; /* [-1,-2,-3,4,-5,-6,-7,8,-9,-1,-1,-1,-1,-1,-1,-7,-8] [-9,-9] */
写者:zengzy
出处: http://www.cnblogs.com/zengzy
标题有【转】字样的文章从别的地方转过来的,否则为个人学习笔记