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
然后我们计算根节点