ধরুন আমাদের একটি বাইনারি গাছ আছে, আমাদের যেকোনো নোড এবং এর বংশধরদের মধ্যে সবচেয়ে বড় পরম পার্থক্য খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুট মত হয়
তাহলে আউটপুট হবে 7 কারণ নোড 8 এবং 1 এর মধ্যে সবচেয়ে বড় পরম পার্থক্য।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন dfs() সংজ্ঞায়িত করুন। এটি নোড গ্রহণ করবে
- যদি নোড নাল না হয়, তাহলে
- ইতিবাচক এবং নেতিবাচক অসীম সহ একটি তালিকা ফেরত দিন
- বাম :=dfs(নোডের বামে)
- ডান :=dfs(নোডের ডানদিকে)
- res :=সাথে একটি জোড়া (সর্বনিম্ন বাম[0], ডান[0] এবং নোডের মান, এবং সর্বাধিক বাম[1], ডান[1] এবং নোডের মান)
- উত্তর :=উত্তরের সর্বোচ্চ, (নোডের মান - res[0]) এবং (res[1] - নোডের মান)
- রিটার্ন রিটার্ন
- প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
- উত্তর :=0
- dfs(root)
- উত্তর ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
ক্লাস TreeNode:def __init__(self, data, left =None, right =None):self.val =data self.left =left self.right =rightclass Solution:def solve(self, root):def dfs( নোড):নোড না থাকলে:[float("inf"), float("-inf")] বাম =dfs(node.left) right =dfs(node.right) res =[min(left[0]), ফেরত দিন right[0], node.val), max(left[1], right[1], node.val)] self.ans =max(self.ans, node.val - res[0], res[1] - node.val) রিটার্ন res self.ans =0 dfs(root) return self.ansob =Solution()root =TreeNode(1)root.left =TreeNode(5)root.right =TreeNode(3)root.right। left =TreeNode(2)root.right.right =TreeNode(8)root.right.left.left =TreeNode(7)root.right.left.right =TreeNode(4)print(ob.solve(root))প্রে>ইনপুট
root =TreeNode(1)root.left =TreeNode(5)root.right =TreeNode(3)root.right.left =TreeNode(2)root.right.right =TreeNode(8)root.right.left .left =TreeNode(7)root.right.left.right =TreeNode(4)আউটপুট
7