这个题目,大佬说和树的直径一样。
但是这种方法做起来更简单一些,这里我写的是包含节点数值的。
代码如下,不完整,是核心代码:
struct Node{
int value ;
Node *left ;
Node *right;
}*Root;
int max_sum ;
int maxSinglePathSum(Node *root)
{
if(root==NULL)
return 0 ;
int left = maxSinglePathSum(root->left);
int right = maxSinglePathSum(root->right);
int val = root->value;
if(left>0) value +=left;
if(right>0) value +=right;
max_sum =max(max_sum,val);'
return max(root->value,max(root->value+left,root->value+right));
}
int getPathMax(Node *root){
if(root==NULL)
return 0 ;
max_sum = 0 ; // root->value
maxSinglePathSum(root);
return max_sum;
}