สมมติว่าเรามีต้นไม้ไบนารี เราต้องหาผลรวมสูงสุดของเส้นทางใด ๆ ระหว่างสองโหนดใด ๆ
ดังนั้นหากอินพุตเป็นแบบ

จากนั้นเอาต์พุตจะเป็น 62 เนื่องจากโหนดเป็น [12,13,14,16,7]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน utils() สิ่งนี้จะหยั่งราก
-
ถ้ารูทเป็นโมฆะ
-
คืนค่า 0
-
-
l :=utils(ซ้ายของรูท)
-
r :=utils(ทางขวาของรูท)
-
max_single :=สูงสุดของ (สูงสุด l และ r) + ค่าของรูท) และค่าของรูท
-
max_top :=สูงสุดของ max_single และ l + r + ค่ารูท
-
res :=สูงสุดของ res และ max_top
-
ส่งคืน max_single
-
จากวิธีหลัก ให้ทำดังนี้ −
-
ถ้ารูทเป็นโมฆะ
-
คืนค่า 0
-
-
res :=อินฟินิตี้
-
utils(root)
-
ผลตอบแทน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class TreeNode:
def __init__(self, value):
self.val = value
self.left = None
self.right = None
class Solution:
def solve(self, root):
if root is None:
return 0
self.res = float("-inf")
self.utils(root)
return self.res
def utils(self, root):
if root is None:
return 0
l = self.utils(root.left)
r = self.utils(root.right)
max_single = max(max(l, r) + root.val, root.val)
max_top = max(max_single, l + r + root.val)
self.res = max(self.res, max_top)
return max_single
ob = Solution()
root = TreeNode(13)
root.left = TreeNode(12)
root.right = TreeNode(14)
root.right.left = TreeNode(16)
root.right.right = TreeNode(22)
root.right.left.left = TreeNode(4)
root.right.left.right = TreeNode(7)
print(ob.solve(root)) อินพุต
root = TreeNode(13) root.left = TreeNode(12) root.right = TreeNode(14) root.right.left = TreeNode(16) root.right.right = TreeNode(22) root.right.left.left = TreeNode(4) root.right.left.right = TreeNode(7)
ผลลัพธ์
62