概述:
当我们拿到一个递归题目时,要明确一个递归的主体,就是这个递归的主体要怎么构造,然后再去想边界条件,返回值等等。
即: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); //返回当前节点加上左右子节点取得最大贡献的一个
}
}