leetcode 124 二叉樹中的最大路徑和

2021-10-09 16:38:07 字數 1777 閱讀 7716

目錄

一、題目內容

二、解題思路

三、**

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

本題中,路徑被定義為一條從樹中任意節點出發,沿父節點-子節點連線,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。

示例 1:

輸入:[1,2,3]

1

/ \2   3

輸出:6

示例 2:

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

-10

/ \9  20

/  \

15   7

輸出:42

後序遍歷,計算左右子樹的路徑和,如果存在小於0的數則不算在路徑內(加0),每次記錄一下根左右三個點的路徑和,然後返回父節點擊擇

左子樹或

右子樹的路徑和,這樣就可以記錄子樹選路徑的情況。

# definition for a binary tree node.

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

def __repr__(self):

return str(self.val)

class solution:

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

self.result = root.val

def dfs(root):

if not root:

return 0

left = max(dfs(root.left), 0) # less than 0, no pass

right = max(dfs(root.right), 0) # less than 0, no pass

self.result = max(root.val + left + right, self.result)

return root.val + max(left, right) # choose left or right

dfs(root)

return self.result

if __name__ == '__main__':

# a = treenode(-10)

# a.left = treenode(9)

# a.right = treenode(20)

# a.right.left = treenode(15)

# a.right.right = treenode(7)

a = treenode(1)

a.left = treenode(-2)

a.right = treenode(3)

s = solution()

ans = s.maxpathsum(a)

print(ans)

LeetCode 124 二叉樹中的最大路徑和

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

Leetcode 124 二叉樹中的最大路徑和

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

leetcode124 二叉樹中的最大路徑和

參考 思路參考 參考 class solution return the max value ended at root node inthelp treenode root 分析1給定乙個非空節點,最終路徑經過這個節點有4種情況 1.只有該節點本身 左右子樹的路徑都是負數 2.該節點 左子樹路徑 ...