ধরুন আমাদের একটি বাইনারি গাছ আছে; আমাদের যেকোনো দুটি নোডের মধ্যে যে কোনো পথের সর্বোচ্চ যোগফল খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুট মত হয়

তাহলে আউটপুট হবে 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 :=অসীম
-
ইউটিলস(রুট)
-
রিটার্ন রিটার্ন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
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