Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาผลรวมที่ใหญ่ที่สุดของเส้นทางระหว่างสองโหนดในไบนารีทรีในPython


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

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมหาผลรวมที่ใหญ่ที่สุดของเส้นทางระหว่างสองโหนดในไบนารีทรีในPython

จากนั้นเอาต์พุตจะเป็น 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