概述:
当我们拿到一个递归题目时,要明确一个递归的主体,就是这个递归的主体要怎么构造,然后再去想边界条件,返回值等等。
即:1.确定主体 -> 2.考虑边界条件(或者说是每次递归的出口)和 返回值。
以力扣:124. 二叉树中的最大路径和为例。
-
非空节点的最大贡献值等于节点值与其子节点中的最大贡献值之和(对于叶节点而言,最大贡献值等于节点值)。
-
空节点的最大贡献值等于 0。

代码部分:
class Solution {
int maxSum = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
dfs(root);
return maxSum;
}
int dfs(TreeNode node) {
if(node == null) { //边界条件:如果当前节点为空,表示不做出贡献,也就是贡献值为零
return 0;
}
int leftMax = Math.max(dfs(node.left),0);
int rightMax = Math.max(dfs(node.right),0);
int priceNewpath = node.val +leftMax + rightMax;
maxSum = Math.max(maxSum,priceNewpath);
return node.val + Math.max(leftMax,rightMax); //返回当前节点加上左右子节点取得最大贡献的一个
}
}
递归算法在二叉树中寻找最大路径和:主体与边界条件的应用
本文介绍了如何使用递归方法解决LeetCode124题——二叉树中的最大路径和问题,关键步骤包括确定递归主体(节点值加子节点最大贡献),设置边界条件(空节点贡献为0),以及计算新的路径贡献并更新最大值。
663

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



