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