題目:
給定乙個非空二叉樹,返回其最大路徑和。
本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。
舉例:【1,2,3】
思路:二叉樹只能從根節點開始,深度或廣度遍歷。
深度遍歷 –
1,可以遞迴遍歷到最左節點,然後一層一層的返回最大求和項。直到頂層。
2,右邊同理。
並在這個過程中,計算最大路徑和。
(這裡比較難理解的應該是最大路徑和是怎麼算的。其實就是可以將二叉樹簡化為只有3個節點,那最大路徑和就是左節點+當前節點+右節點。然後將其擴充套件到整棵樹)
求解:
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
import sys
class
solution
:def
maxpathsum
(self, root: treenode)
->
int:
self.res =
-sys.maxsize -
1# 初始化res為最小值
defmaxnode
(node)
:if node==
none
:return
0# 求左節點的最大值(如果節點小於0,則res不加這個點的值,返回0)
leftnodeval =
max(maxnode(node.left),0
)# 求右節點的最大值(如果節點小於0,則res不加這個點的值,返回0)
rightnodeval =
max(maxnode(node.right),0
)# 更新當前節點的最大和
nownodeval = node.val+
max(leftnodeval,rightnodeval)
# res 和 左節點+當前節點+右節點,選最大作為res
self.res =
max(self.res , node.val + leftnodeval + rightnodeval)
# 返回當前節點更新後的最大和
return nownodeval
maxnode(root)
return self.res
練習之《求最大路徑》
題目描述 已知乙個斜三角 22 32 14 77 45 12 34 37 23 44 23 15 34 54 88 從最左上角元素開始往右或往右下走,請問順著哪條路所經過的值的總和最大,如可以有路線 22,32,34,23,54 22,12,44,34,88等等 請求出滿足值總和最大的那條線路。vi...
樹形dp ,求最大路徑權值,最長路徑
include include include include include include include include include include include using namespace std typedef long long ll const int maxn 500005...
演算法習題 找最大路徑記錄
在矩形找路徑輸出最大值 輸入4 4 0 1 0 0 2 0 0 5 9 0 100 0 0 11 0 0輸出 111 include include define n 10 int map n n intfind int m,int n void input int m,int n intmax i...