কম্পিউটার

পাইথনে জোড় সমষ্টি সহ দীর্ঘতম পথের দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম


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

সুতরাং, যদি ইনপুটটি চিত্রের মতো হয়, তাহলে আউটপুট হবে 5, পাথ যেমন [5, 2, 4, 8, 5], যোগফল =24(এমনকি)।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন dfs() সংজ্ঞায়িত করুন। এটি নোড গ্রহণ করবে
  • যদি নোড নাল হয়, তাহলে
    • একটি জোড়া ফেরত দিন (0, -inf)
  • (left_0, left_1) :=dfs(নোডের বামে)
  • (right_0, right_1) :=dfs(নোডের ডানদিকে)
  • নোডের মান যদি বিজোড় হয়, তাহলে
    • উত্তর :=সর্বাধিক উত্তর, (বাম_1 + ডান_0 + 1) এবং (বাম_0 + ডান_1 + 1)
    • একটি জোড়া ফেরত দিন (সর্বোচ্চ (বাম_1 + 1), (ডান_1 + 1) এবং 0), সর্বাধিক (বাম_0 + 1) এবং (ডান_0 + 1))
  • অন্যথায়,
    • উত্তর :=সর্বাধিক উত্তর, (বাম_০ + ডান_০ + ১) এবং (বাম_১ + ডান_১ + ১)
    • একটি জোড়া ফেরত দিন (সর্বোচ্চ (বাম_0 + 1), (ডান_0 + 1), 0), সর্বাধিক (বাম_1 + 1), (ডান_1 + 1))
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
  • উত্তর :=0
  • dfs(root)
  • উত্তর ফেরত দিন

উদাহরণ (পাইথন)

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.val = data
      self.left = left
      self.right = right
class Solution:
   def solve(self, root):
      def dfs(node):
         if not node:
            return 0, float("-inf")
         left_0, left_1 = dfs(node.left)
         right_0, right_1 = dfs(node.right)
         if node.val & 1:
            self.ans = max(self.ans, left_1 + right_0 + 1, left_0 + right_1 + 1)
            return max(left_1 + 1, right_1 + 1, 0), max(left_0 + 1, right_0 + 1)
         else:
            self.ans = max(self.ans, left_0 + right_0 + 1, left_1 + right_1 + 1)
            return max(left_0 + 1, right_0 + 1, 0), max(left_1 + 1, right_1 + 1)
   self.ans = 0
   dfs(root)
   return self.ans
ob = Solution()
root = TreeNode(2)
root.left = TreeNode(5)
root.right = TreeNode(4)
root.right.left = TreeNode(8)
root.right.right = TreeNode(2)
root.right.left.left = TreeNode(5)
print(ob.solve(root))

ইনপুট

root = TreeNode(2)
root.left = TreeNode(5)
root.right = TreeNode(4)
root.right.left = TreeNode(8)
root.right.right = TreeNode(2)
root.right.left.left = TreeNode(5)

আউটপুট

5

  1. পাইথনে বাইনারি গাছের দীর্ঘতম বিকল্প পথের দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে একটি বাইনারি গাছের মূল থেকে পাতা পর্যন্ত দীর্ঘতম সমষ্টি পথের যোগফল খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে একটি বাইনারি গাছের দীর্ঘতম এমনকি মান পথ খুঁজে বের করার প্রোগ্রাম

  4. পাইথন প্রোগ্রামে একটি সংখ্যার জোড় গুণনীয়কের সমষ্টি খুঁজুন