สมมติว่าเรามีต้นไม้ไบนารี เราต้องหาผลรวมสูงสุดของเส้นทางใด ๆ ระหว่างสองโหนดใด ๆ
ดังนั้นหากอินพุตเป็นแบบ
จากนั้นเอาต์พุตจะเป็น 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