/**
* @author 49367
* @date 2021/4/28 10:54
*/
public class MaxPathSumNC6 {
private int maxSum = Integer.MIN_VALUE;
/**
* 获取树的最大路径,开始结点和结束结点都可以是任意结点
* @param root TreeNode类
* @return int整型
*/
public int maxPathSum (TreeNode root) {
// write code here
getMaxPathSum(root);
return maxSum;
}
/**
* 递归获取树中的最大路径
* 后序遍历的思想,从下往上找路径
* @param root
* @return
*/
private int getMaxPathSum(TreeNode root) {
if (root == null)
return 0;
int leftMaxSum = getMaxPathSum(root.left);
int rightMaxSum = getMaxPathSum(root.right);
int maxSubPath = Math.max(0, Math.max(leftMaxSum, rightMaxSum));
/*
路径可以是从左结点到根结点,也可是从右结点到根节点,也可是从左结点经根结点到右结点
也可以只是根结点本身
*/
maxSum = Math.max(Math.max(maxSum, root.val + maxSubPath),
root.val + leftMaxSum + rightMaxSum);
// 往上走,只能是从左结点到根结点再往上或者是从右结点到根结点再往上,或者从根节点直接往上
return Math.max(root.val, root.val + maxSubPath);
}
}
NC6 二叉树的最大路径和(二叉树的遍历,递归,动态规划)
最新推荐文章于 2024-10-09 09:53:23 发布