কম্পিউটার টিউটোরিয়াল

পাইথনে ট্রির নন-এডজেসেন্ট নোডের সর্বোচ্চ যোগফল খুঁজে বের করার প্রোগ্রাম


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

যদি ইনপুট হয়:

পাইথনে ট্রির নন-এডজেসেন্ট নোডের সর্বোচ্চ যোগফল খুঁজে বের করার প্রোগ্রাম

তবে আউটপুট হবে ১৭ কারণ ১০, ৪, ৩ একে অপরের সাথে এডজেসেন্ট নয়।

এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:

  • একটি f() ফাংশন সংজ্ঞায়িত করুন। এটি node গ্রহণ করবে।
  • যদি node null হয়, (0, 0) ফেরত দিন।
  • (a, b) := f(node.left), (c, d) := f(node.right)
  • একটি পেয়ার ফেরত দিন: (max(node.val + b + d, a + c), a + c)
  • মূল মেথড থেকে f(root) কল করে এর প্রথম মান ফেরত দিন।

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:

উদাহরণ

class TreeNode: def __init__(self, data, left = None, right = None):    self.val = data    self.left = left    self.right = right def f(node):    if not node:       return 0, 0    a, b = f(node.left)    c, d = f(node.right)    return max(node.val + b + d, a + c), a + c class Solution:    def solve(self, root):       return f(root)[0] ob = Solution() root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(10) root.left.left = TreeNode(4) root.left.right = TreeNode(3) print(ob.solve(root))

ইনপুট

root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(10) root.left.left = TreeNode(4) root.left.right = TreeNode(3)

আউটপুট

17

  1. পাইথনে বাইনারি ট্রির রুট থেকে লিফ পর্যন্ত সবচেয়ে লম্বা পাথের যোগফল খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে ট্রির বামপাশের গভীরতম নোড খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে বাইনারি ট্রিতে রুট থেকে লিফ পর্যন্ত যেকোনো পথের সর্বোচ্চ যোগফল খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে বাইনারি ট্রির সর্বাধিক প্রস্থ (Maximum Width) বের করার প্রোগ্রাম