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

Python দিয়ে বাইনারি ট্রিতে ভালো লিফ নোড পেয়ার সংখ্যা বের করার প্রোগ্রাম


মান লাগিয়ে, আমাদের একটি বাইনারি ট্রি এবং আরেকটি মান distance d আছে। দুটি ভিন্ন লিফ নোডের পেয়ারকে ভালো বলা হয় যখন তাদের মাঝপথের শর্টেস্ট পাথ দৈর্ঘ্য d-এর চেয়ে ছোট বা সমান হয়।

যেমন, ইনপুট যদি এমন হয়:

Python দিয়ে বাইনারি ট্রিতে ভালো লিফ নোড পেয়ার সংখ্যা বের করার প্রোগ্রাম

এবং distance d = 4, তবে আউটপুট হবে 2 কারণ পেয়ারগুলো হল (8,7) এবং (5,6) যাদের পাথ দৈর্ঘ্য ২, কিন্তু (7,5) বা (8,6) বা অন্য পেয়ারগুলো ভালো নয় কারণ তাদের পাথ দৈর্ঘ্য ৫ যা d = 4-র চেয়ে বড়।

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

  • sol := 0
  • একটি ফাংশন util() ডিফাইন করুন। এটি root নেবে:
    • যদি root null হয়, তবে একটি খালি লিস্ট রিটার্ন করুন
    • যদি root লিফ হয়, তবে [0, 0] পেয়ার ধারণকারী একটি অ্যারে রিটার্ন করুন
    • অন্যথায়:
      • cur := একটি নতুন লিস্ট
      • l := util(root.left)
      • r := util(root.right)
      • l-এ থাকা প্রতিটি n জন্য n[1] := n[1] + 1
      • r-এ থাকা প্রতিটি n জন্য n[1] := n[1] + 1
      • r-এ থাকা প্রতিটি n এবং l-এ থাকা প্রতিটি n1 জন্য:
        • যদি n[1] + n1[1] <= d হয়, তবে sol := sol + 1
      • l+r রিটার্ন করুন
  • মেইন মেথড থেকে util(root) কল করুন
  • sol রিটার্ন করুন

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

উদাহরণ

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def __init__(self):
        self.sol = 0
    def solve(self, root, d):
        def util(root):
            if not root:
                return []
            if not root.left and not root.right:
                return [[0, 0]]
            else:
                cur = []
                l = util(root.left)
                r = util(root.right)
                for n in l:
                    n[1] += 1
                for n in r:
                    n[1] += 1
                for n in r:
                    for n1 in l:
                        if n[1] + n1[1] <= d:
                            self.sol += 1
                return l+r
        util(root)
        return self.sol
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.right = TreeNode(4)
root.left.right.left = TreeNode(8)
root.left.right.right = TreeNode(7)
root.right.left = TreeNode(5)
root.right.right = TreeNode(6)
d = 4
ob = Solution()
print(ob.solve(root, d))

ইনপুট

root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.right = TreeNode(4) root.left.right.left = TreeNode(8) root.left.right.right = TreeNode(7) root.right.left = TreeNode(5) root.right.right = TreeNode(6) d = 4

আউটপুট

2

  1. Python দিয়ে সব নোডে পৌঁছাতে মিনিমাম ভার্টেক্স বের করার প্রোগ্রাম

  2. Python দিয়ে একই লেবেল ওয়ালা সাব-ট্রি নোড সংখ্যা বের করার প্রোগ্রাম

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

  4. পাইথনে BST-এ নির্দিষ্ট রেঞ্জে থাকা নোডের সংখ্যা খুঁজে বের করার প্রোগ্রাম