这个题目,大佬说和树的直径一样。
但是这种方法做起来更简单一些,这里我写的是包含节点数值的。
代码如下,不完整,是核心代码:
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;
}
本文介绍了一种求解树中最大路径和的算法实现。该算法通过递归方式计算从根节点到叶子节点的最大路径和,并考虑了路径可能包含的负数节点值。通过核心代码示例展示了如何找到一棵树中最大的路径之和。
4945

被折叠的 条评论
为什么被折叠?



