树+ 动态规划
这种结局思路主要是 利用一个全局变量,然后加一个递归方法,递归方法求解初当前节点处满足题意的最大值情况,然后当前节点能够满足的最大值与目前得到的最大值做一个比较
- 全局变量 Max
- 调用递归方法
- 调用递归左右节点的情况
- 更新最大值的情况
- return 返回当前节点满足的情况
路径最大和 124. Binary Tree Maximum Path Sum
class Solution {
int max=0;
public int diameterOfBinaryTree(TreeNode root) {
if(root==null)
return 0;
maxdepth(root);
return max;
}
//通过树的高度来解决该种问题
private int maxdepth(TreeNode root){
if(root==null)
return 0;
int left = maxdepth(root.left);
int right = maxdepth(root.right);
// 动态规划问题,更新权重情况
max= Math.max(left+right,max);
//1 代表当前根节点的情况 + 1操作
return Math.max(left,right)+1;
}
}
树中路径最长 543. Diameter of Binary Tree
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;
// 左边如何小于0一定添加,等于0相等于不添加
int left = Math.max(0, maxPathDown(node.left));
// 右边如何小于0,等于0相当于不添加的情况
int right = Math.max(0, maxPathDown(node.right));
maxValue = Math.max(maxValue, left + right + node.val);
//也就是当前节点的值不知道而已 ,
w为何
return Math.max(left, right) + node.val; //
}
}
关于为何要返回return Math.max(left,right) + node.val
下面图片的演示结果情况
|