问题描述:
Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
原问题链接:https://leetcode.com/problems/binary-tree-maximum-path-sum/
问题分析
这个问题一开始比较难找到解决的思路。因为这里要求的路径并不一定是从树的根节点经过的路径。而如果把这个问题更加一般化的话,我们计算从某个节点到叶节点的所有可能最大路径,无非就是递归的计算它的两个子节点的最大路径值,再把它们的值和自身加起来。只是我们最终返回的那个是经过根节点的值,它不一定是最大的。
在这里,突然给了我们一个想法,就是在前面递归的过程中,每次都要比较和计算一个当前节点的最大路径值。而如果在这个时候我们用一个全局的变量保存这个最大值,每次都和这个值比较调整的话,这个问题就可以解决了。
于是我们有如下的代码:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { int maxValue; public int maxPathSum(TreeNode root) { maxValue = Integer.MIN_VALUE; maxPathDown(root); return maxValue; } private int maxPathDown(TreeNode node) { if(node == null) return 0; int left = Math.max(0, maxPathDown(node.left)); int right = Math.max(0, maxPathDown(node.right)); maxValue = Math.max(maxValue, left + right + node.val); return Math.max(left, right) + node.val; } }
从实现的思路来说,这里通过借求经过根节点的所有路径的最大值,在每次递归的过程中比较计算最长的路径。这种方式比较巧妙。
相关推荐
python python_leetcode题解之124_Binary_Tree_Maximum_Path_Sum
javascript js_leetcode题解之124-binary-tree-maximum-path-sum.js
3. "Binary Tree Maximum Path Sum"(二叉树的最大路径和):这是一道困难级别的问题,涉及到深度优先搜索(DFS)和回溯,寻找从根节点到叶子节点的最大路径和。 开源项目“LeetCode-master”很可能包含了这些问题...
lru缓存leetcode leetcode 大批 41. First Missing Positive 广度优先搜索 773. Sliding Puzzle 864. Shortest Path to Get All Keys 深度优先搜索 996. Number of Squareful Arrays 拓扑排序 269. Alien Dictionary...
对于更复杂的题目,如"Binary Tree Maximum Path Sum"(二叉树的最大路径和),我们需要掌握深度优先搜索(DFS)或广度优先搜索(BFS)策略,同时理解和运用树的性质。在这个问题中,我们需要沿着一条路径递归地访问...
leetcode 分类 LeetCode Progress 128/154 Other Solutions C++,有详细思路解释 python,部分有解释 Java,部分有解释 Java Associated Documents and Resources Peter norvig神牛Python代码写的很飘逸,果然是有LISP...
"Binary Tree Maximum Path Sum"则可能涉及到深度优先搜索或广度优先搜索等树遍历策略。 此外,C#的特性如委托、事件、匿名函数、LINQ等也可能在LeetCode的C#解决方案中得到体现。例如,LINQ(Language Integrated ...
例如,Binary Tree Preorder Traversal(二叉树前序遍历)和Shortest Path in Binary Matrix(二进制矩阵中最短路径)等。 二、算法策略 1. 搜索:深度优先搜索(DFS)和广度优先搜索(BFS)是解决许多问题的有效...
另一个例子是“Binary Tree Maximum Path Sum”,需要你找到二叉树中具有最大路径和的路径,这涉及到递归和树的遍历。 解决LeetCode问题的过程中,你还可以学习如何编写清晰、简洁且易于理解的代码,这是面试官非常...
5. **二叉树**:二叉树问题包括遍历、查找、平衡调整等,如"二叉树的最大路径和"(Maximum Path Sum)、"验证二叉搜索树"(Validate Binary Search Tree)。 6. **回溯**:回溯是一种尝试所有可能解的算法策略,...
leetcode 【演示记录】 报告 展示 2017/03/06 1.二和,167.二和二 2107/03/06 15.3 总和,16.3 总和最近,18.4 总和,11.最多水的容器 2017/03/09 62.Unique Paths, 63.Unique Paths II, 64.Minimum Path Sum 2017/...
"二叉树的最大路径和"(Maximum Depth of Binary Tree)是其中的一例。 5. **堆栈和队列**:如实现栈或队列的功能,或者使用它们解决实际问题。"有效括号"(Valid Parentheses)要求使用栈来检查括号匹配性。 6. *...
31. Binary Tree Maximum Path Sum:二叉树中的最大路径和。 32. Binary Tree Upside Down:将一个二叉树进行翻转。 【位操作】 33. Single Number:找出数组中唯一不出现一次的数字。 34. Single Number II:找出...
- **Binary Tree Path**:找到二叉树中和为目标值的路径。 - **Sum Root to Leaf Numbers**:计算二叉树所有从根到叶子节点的路径之和。 4. **动态规划(Dynamic Programming)**: - **Best Time To Buy and ...
再如,"Binary Tree Maximum Path Sum"问题,要求找到二叉树中从根节点到叶子节点的最大路径和。这个问题可以通过深度优先搜索或广度优先搜索结合动态规划来解决。 GuaZiDou的解决方案不仅包含了代码实现,通常还...
leetcode 树节点二叉树最大路径和 执行 : /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val ...
* [Binary Search Tree](https://github.com/kamyu104/LeetCode#binary-search-tree) * [Breadth-First Search](https://github.com/kamyu104/LeetCode#breadth-first-search) * [Depth-First Search]...
31. Binary Tree Maximum Path Sum:二叉树中的最大路径和。 32. Binary Tree Upside Down:将二叉树进行上下翻转。 五、位运算 33. Single Number:只出现一次的数字,要求不使用额外空间。 34. Single Number II...
104.maximum-depth-of-binary-tree (二叉树的最大深度) 105.construct-binary-tree-from-preorder-and-inorder-traversal (从前序与中序遍历序列构造二叉树) 106.construct-binary-tree-from-inorder-and-postorder-...