Algorithms first
二叉树中的最大路径和 · 交互式算法学习
找到树中任意非空路径的最大节点和。
#124 · 二叉树
二叉树中的最大路径和
Binary Tree Maximum Path Sum
root = [-10,9,20,null,null,15,7]树 / 图3 个关键状态
步骤 1叶子 15、7 返回自身贡献。
15,7推荐
一次后序遍历
时间
O(n)空间 O(h)后序返回单侧最大贡献,同时用左右贡献更新全局路径。
1function maxPathSum(root) {2 let best = -Infinity;3 4 function gain(n) {5 if (!n) return 0;6 const l = Math.max(0, gain(n.left)),7 r = Math.max(0, gain(n.right));8 best = Math.max(best, n.val + l + r);9 return n.val + Math.max(l, r)10 }11 gain(root);12 return best;13}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
1/**2 * Definition for a binary tree node.3 * public class TreeNode {4 * int val;5 * TreeNode left;6 * TreeNode right;7 * TreeNode() {}8 * TreeNode(int val) { this.val = val; }9 * TreeNode(int val, TreeNode left, TreeNode right) {10 * this.val = val;11 * this.left = left;12 * this.right = right;13 * }14 * }15 */16class Solution {17 private int ans = -1001;18 19 public int maxPathSum(TreeNode root) {20 dfs(root);21 return ans;22 }23 24 private int dfs(TreeNode root) {25 if (root == null) {26 return 0;27 }28 int left = Math.max(0, dfs(root.left));29 int right = Math.max(0, dfs(root.right));30 ans = Math.max(ans, root.val + left + right);31 return root.val + Math.max(left, right);32 }33}交互式算法学习
从执行步骤真正理解 LeetCode 经典 150
本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。
AlgoViz Lab
二叉树中的最大路径和 · 解法对比
找到树中任意非空路径的最大节点和。
- 测试用例
root = [-10,9,20,null,null,15,7]- 题目分类
- 二叉树
- 解法对比
- 2
枚举每个节点为路径最高点
对每个节点重新计算左右向下最大贡献。
- 时间
O(n²)- 空间
O(h)
一次后序遍历
后序返回单侧最大贡献,同时用左右贡献更新全局路径。
- 时间
O(n)- 空间
O(h)