二叉树的最长的路径长度和最大路径和
二叉树中的最大路径和
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3]
1
/ \
2 3
输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
输出: 42
思路解析
问题就来了,怎么考虑包含根节点的最大路径等于多少?因为我们递归求出来的最大 left
可能不包含根节点的左孩子,例如下边的情况。
8
/ \
-3 7
/ \
1 4
左子树的最大值 left 肯定就是 4 了,然而此时的根节点 8 并不能直接和 4 去相连。所以考虑包含根节点的路径的最大值时,并不能单纯的用 root.val + left + right。
所以如果考虑包含当前根节点的 8 的最大路径,首先必须包含左右孩子,其次每次遇到一个分叉,就要选择能产生更大的值的路径。例如下边的例子:
8
/ \
-3 7
/ \
1