每日一题算法:2020年6月21日 二叉树中的最大路径和 maxPathSum

2020年6月21日 二叉树中的最大路径和 maxPathSum默认格式:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int maxPathS
摘要由CSDN通过智能技术生成
2020年6月21日 二叉树中的最大路径和 maxPathSum

在这里插入图片描述

默认格式:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
   
    public int maxPathSum(TreeNode root) {
   
        return 0;
    }
}

解题思路:

这道题目有点坑人,他求的不是从根节点开始的最大值,而是从任意树节点开始的最大值。这样的话,首先你不能把它当做拓扑图来做,因为有些路径是单向的,而且我只知道计算从某个节点到所有节点的距离,不能从根节点求出所有节点的最大距离。

递归。

设计一个算法,给出一个节点,返回该节点到所有子节点子树中值最大的分支。

在这里插入图片描述
在这里插入图片描述

我们根据递归的思想,从最小的开始做起,所以我们先计算4,5两个节点的最大子树值,很容易看出就是他们本身,所以就是4和5。
在这里插入图片描述

然后我们就可以得到7的最大子树和7,同时我们需要记下7的左右最大子树值的和11并且和当前最大值比较,因为每个节点只会经过一次,如果经过了7这个节点,就意味着要么他们要得到的是7的最大的子树值,要么就是7是最高的那个定点,所以我们要假设7是最高的定点进行一次判断。
在这里插入图片描述

同理,我们对右边这棵树也做一次判断。而且也要计算最大子树的和16

然后我们计算根节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值