二叉樹最大路徑和

2021-09-29 16:02:05 字數 2543 閱讀 6390

每個節點不可以重複經過求,求二叉樹的最大路徑和。

二叉樹如圖

本文採用深度優先演算法解題。假設每個節點都有兩個屬性,s(stop),c(continue)

s屬性為,該節點及其以下節點的不停止走法最大值。c屬性為在還有路可走的情況下的最大值。

舉例說明:

node4節點,有兩條路可走:路線一和路線二

路線一意味著,經過node4後無處可走,路線二意味著經過node4後還有路可走。分別對應著s屬性與c屬性。

s = 10 , c = 10

因此得出結論1:在葉子節點,s屬性與c屬性時一致的,等於本節點的值。

我們來分析node2的兩個屬性。

node2的s值有三種情況:10,12,24,10,12

node2 的 c值有 12, 14, 2

為什麼有三個值呢?

先看s屬性,s屬性分為五種情況,

node4的c    10(node4本可以繼續,但是沒有繼續)

node5的c 12(同理)

node4->node2->node5 24

node4的s 10

node5的s 12

c屬性,分為三種,

node4->node2->  12

node5->node2-> 14

node2-> 2

對node2的s屬性和c屬性取最大值得。s = 24 c = 14

因此可以得出下圖

對node1進行分析

c屬性為:

node2的c->node1  2 

node3的c->node1 15

node1(特性雖然無路可走也要加上這種情況)

s屬性分為五種幾種情況:

node1->node2的c  15

node1-> node3的c 2

node2的s 24

node3 的s 2

ode2的c->node1-> node3 的c 16

此時比較node1的c與s,最大值為24,因此結果為24.

**實現:

class

tree_node()

:def

__init__

(self,x,):

self.left =

none

self.right =

none

self.value = x

defhelper

(self,root)

:if root.left ==

none

: lefts, leftc =0,

0else

: leftc,lefts = self.helper(root.left)

if root.right ==

none

: rights, rightc =0,

0else

: rightc,rights = self.helper(root.right)

c =max(root.value+leftc,root.value+rightc,root.value)

s =max(lefts,rights,leftc,rightc,root.value+leftc+rightc)

return c,s

if __name__ ==

'__main__'

: node7 = tree_node(1)

node6 = tree_node(2)

node5 = tree_node(12)

node4 = tree_node(10)

node3 = tree_node(-1

) node2 = tree_node(2)

node1 = tree_node(1)

node1.left = node2

node1.right = node3

node2.left = node4

node2.right = node5

node3.left = node6

node3.right = node7

print

(node1.helper(node1)

)

二叉樹最大路徑和 python 二叉樹最大路徑和

1.題目描述 輸入乙個二叉樹層次遍歷的結果,輸出這個二叉樹最大路徑和。路徑不一定從根節點開始和葉子節點結束。只要是連續的路徑就可以。如輸入 10,9,20,null,null,15,7 109 20 15 7 輸出 42 2.首先將乙個陣列還原成乙個二叉樹。然後根絕二叉樹的根節點返回最大路徑和。cl...

二叉樹中最大路徑和

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

二叉樹的最大路徑和

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