题目
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和 。
解题过程
思路:对于一个二叉树
a是根结点即(root)b和c是a的子结点。最大的路径情况有三种:
- a+b+c
- b+a+a的父结点
- c+a+a的父结点
其中情况1无法递归,但可能是最大的路径和。
情况2 3对a+b和a+c进行递归,选择最优的,遇到负数就舍弃。
解题代码
class Solution
{
public:
int max_sum = INT_MIN;
int dfs(TreeNode* node)
{
if (node == nullptr)
return 0;
int left_max = max(0, dfs(node->left));
int right_max = max(0, dfs(node->right));
int son_sum = left_max + node->val + right_max;
max_sum = max(max_sum, son_sum);
int result = node->val + max(left_max, right_max);
return result;
}
int maxPathSum(TreeNode* root)
{
dfs(root);
return max_sum;
}
};
解答情况: