题目
描述
二叉树里面的路径被定义为:从该树的任意节点出发,经过父=>子或者子=>父的连接,达到任意节点的序列。
注意:
1.同一个节点在一条二叉树路径里中最多出现一次
2.一条路径至少包含一个节点,且不一定经过根节点
给定一个二叉树的根节点root,请你计算它的最大路径和
最优路径是:2=>1=>3,或者3=>1=>2,最大路径和=2+1+3=6
数据范围:节点数满足 0≤n≤10000 ,节点上的值满足 ∣val∣≤1000
要求:空间复杂度 O(1),时间复杂度 O(n)
思路
递归,递归返回左子树的最大路径、右子树的最大路径、当前根节点的最大值,递归过程中更新路径最大值,有可能是当前值,左子树路径,右子树路径,左到根到右四种情况。
代码
python版本:
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类
# @return int整型
#
class Solution:
ans = float('-inf')
def maxPathSum(self , root: TreeNode) -> int:
# write code here
self.dfs(root)
return self.ans
def dfs(self, root: TreeNode):
#递归出口
if(root==None):
return float('-inf')
lsum = self.dfs(root.left)
rsum = self.dfs(root.right)
self.ans = max(self.ans, lsum+root.val, rsum+root.val, lsum+rsum+root.val, root.val)
return max(root.val, root.val+lsum, root.val+rsum)
c++版本:
无