124 二叉樹中最大路徑求和

2021-10-03 18:07:45 字數 1487 閱讀 2977

給定乙個非空二叉樹,返回其最大路徑和。

本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。

該路徑至少包含乙個節點,且不一定經過根節點。

示例 1:

輸入: [1,2,3]

1/ \

2 3

輸出: 6

示例 2:

輸入: [-10,9,20,null,null,15,7]

-10/ \

9  20

/  \

15   7

輸出: 42

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution:

def maxpathsum(self, root: treenode) -> int:

self.res = float('-inf') # 定義全域性變數,記錄最大值

def helper(root):

if not root: return 0

# 求左 | 右子樹的最大值,<0, 直接賦值=0, 剪枝不遍歷

left = max(helper(root.left), 0)

right = max(helper(root.right), 0)

cur_cost = left +right +root.val # 加入 root節點,記錄當前總和

self.res = max(self.res, cur_cost) # 更新最大值

# 返回左|右的乙個最大分支,此時只能為 左|右 乙個分支

return root.val + max(left, right)

helper(root)

return self.res

def create_tree(self,root,list,i):

if iif not list[i]: return none

else:

root = treenode(list[i])

root.left = self.create_tree(root.left,list,2*i+1)

root.right = self.create_tree(root.right,list,2*i+2)

return root

return root

if __name__ =="__main__":

s = solution()

nums = [-10,9,20,none,none,15,7]

nums = [1,2,3]

root = s.create_tree(none,nums,0)

r = s.maxpathsum(root)

print(r)

二叉樹中最大路徑和

給定乙個非空二叉樹,返回其最大路徑和。本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。輸出 6 解析 2 1 3為最大路徑和 輸出 42 解析 15 20 7為最大路徑和 func maxpathsum root treenode int ...

124 二叉樹中的最大路徑和

給定乙個非空二叉樹,返回其最大路徑和。本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。示例 1 輸入 1,2,3 1 2 3 輸出 6示例 2 輸入 10,9,20,null,null,15,7 10 9 20 15 7 輸出 42思路 二...

124 二叉樹中的最大路徑和

給定乙個非空二叉樹,返回其最大路徑和。本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。示例 1 輸入 1,2,3 1 2 3 輸出 6示例 2 輸入 10,9,20,null,null,15,7 10 9 20 15 7 輸出 42思路 對...