Leetcode OJ: Binary Tree Maximum Path Sum

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,

       1
/ 2 3

Return 6.

这个问题可以转化为,以某节点作为祖先,并经过这一节点的和最大的路径。

于就其实就是要遍历每一个节点,并对此节点求出

1. 以此节点作为祖先节点

2. 和最大的路径

然后比较得出全局最大。

当前节点的最大和为

maxSum = max(

maxSingleSum(root->left),

maxSingleSum(root->right),

maxSingleSum(root->left) + maxSingleSum(root->right),

0) + root->val

maxSingleSum是单侧和最大的路径,另外不要忘了比较最后的0,因为单侧路径和小于0对求最大和是没有贡献的。

这里注意到,这里递归实现时其实只需要传maxSingleSum,而maxSum可作为全局的变量进行更新。看代码:


 1 class Solution {
2 public:
3 int maxPathSum(TreeNode *root) {
4 int maxSum = INT_MIN;
5 maxPathSumImpl(root, maxSum);
6 return maxSum;
7 }
8 private:
9 int maxPathSumImpl(TreeNode* root, int& maxSum) {
10 if (root == NULL)
11 return 0;
12 int left = maxPathSumImpl(root->left, maxSum); // 左侧单边
13 int right = maxPathSumImpl(root->right, maxSum); // 右侧单边
14 int curMax = root->val;
15 if (left > 0) // 大于零时才有贡献
16 curMax += left;
17 if (right > 0) // 同上
18 curMax += right;
19 maxSum = max(maxSum, curMax); // 全局最大
20 int single = root->val + max(0, max(left, right)); // 单边最大
21 return single;
22 }
23 };

时间: 2024-10-20 18:13:26

Leetcode OJ: Binary Tree Maximum Path Sum的相关文章

LeetCode OJ - Binary Tree Maximum Path

这道题需要注意的地方有以下一些: 1. 求从子树中的某节点到当前节点的最大路径不能采用递归方法,因为这个部分会被反复的调用,如果用递归,会使得之前已经计算过的节点被重复计算,使得时间复杂度特别高: 2. 树中有节点的值是负数的. 下面是AC代码.(我发现AC并不代表代码真的完全正确!!) 1 /** 2 * Given a binary tree, find the maximum path sum. 3 * The path may start and end at any node in t

第四周 Leetcode 124. Binary Tree Maximum Path Sum (HARD)

124. Binary Tree Maximum Path Sum 题意:给定一个二叉树,每个节点有一个权值,寻找任意一个路径,使得权值和最大,只需返回权值和. 思路:对于每一个节点 首先考虑以这个节点为结尾(包含它或者不包含)的最大值,有两种情况,分别来自左儿子和右儿子设为Vnow. 然后考虑经过这个节点的情况来更新最终答案.更新答案后返回Vnow供父节点继续更新. 代码很简单. 有一个类似的很有趣的题目,给定一个二叉树,选择一条路径,使得权值最大的和最小的相差最大.参考POJ3728 cla

【leetcode】Binary Tree Maximum Path Sum

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, 1 / 2 3 Return 6. 用递归确定每一个节点作为root时,从root出发的最长的路径 在每一次递归中计算maxPath 1 /** 2 * Def

Java for LeetCode 124 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, 1 / 2 3 Return 6. 解题思路: DFS暴力枚举,注意,如果采用static 全局变量的话,在IDE里面是可以通过,但在OJ上无法测试通过,因此需要建立一个类来储存结果,JAVA实现如下: public

[LeetCode][Java] 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, 1 / 2 3 Return 6. 题意: 给定一棵二叉树,找出最大得路径和. 路径的起始和结束位置可以是树中的任意节点. 比如, 给定如下的一棵二叉树 1 / 2 3 返回  6. 算法分析: 1) Rec

【leetcode】Binary Tree Maximum Path Sum (medium)

Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. 找树的最大路径和 注意路径可以从任意点起始和结束. 我发现我真的还挺擅长树的题目的,递归不难.就是因为有个需要比较的量(最大和),所以需要再写一个函数. 因为路径可以从任意点起始和结束,所以每次递归的时候左右子树小于等于0的就可以不管了. #include <iostream> #include

8.10 [LeetCode] 173 Binary Tree Maximum Path Sum

Qestion 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, (the node.val may < 0) 1 / 2 3 / \ 4 5 Return 11. Analysis get leftMax, rightMax, then compare the ro

【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, 1 / 2 3 Return 6. [解析] 题意:在二叉树中找一条路径,使得该路径的和最大.该路径可以从二叉树任何结点开始,也可以到任何结点结束. 思路:递归求一条经过root的最大路径,这条路径可能是:

Leetcode #124 Binary Tree Maximum Path Sum

题目链接:https://leetcode.com/problems/binary-tree-maximum-path-sum/ 题中要求 maxPathSum(TreeNode *root) 函数返回二叉树中最大的 "Path Sum". 而这个最大的 "Path Sum" 可以被分解为三部分之和: "左子树的根节点" 到 "左子树的某个节点" 的 最大 "Path Sum". "右子树的根节点