leetcode之binary-tree-maximum-path-sum
题目
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
return 6;
题意
给出一个二叉树,从任何一个起点开始,找出一个最大路径之和,并返回;
如上图,直接返回6,路径为2-1-3;
解题思路
这里是求树的路径之和,但是不同寻常的是这里的路径是可以从任意一个地方出发的,到另外一个任意节点的,所以说这里不能看做是有向图,而是要看做是一个无向图。
这里采用递归去做。
C++实现代码
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int Max;
int maxPathSum(TreeNode *root) {
Max=INT_MIN;
if(root == nullptr)
return 0;
getMaxPathSum(root);
return Max;
}
int getMaxPathSum(TreeNode* root){
if(root ==nullptr)
return 0;
int leftMax = max(0,getMaxPathSum(root->left));
int rightMax = max(0,getMaxPathSum(root->right));
Max = max(leftMax+rightMax+root->val,Max);
return max(leftMax,rightMax)+root->val;
}
};