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

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


मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें ट्री में किसी भी स्तर की अधिकतम चौड़ाई ढूंढनी है। यहां एक स्तर की चौड़ाई उन नोड्स की संख्या है जो बाएं-most नोड और दाएं-most नोड के बीच रह सकते हैं।

उदाहरण के लिए, यदि इनपुट है

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

तो आउटपुट होगा 2

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

  • एक मैप d बनाएं, न्यूनतम और अधिकतम मान रखने के लिए, न्यूनतम प्रारंभ में अनंत है और अधिकतम 0 है
  • एक फ़ंक्शन dfs() परिभाषित करें। यह root, pos := 0, depth := 0 लेगा
  • यदि root null है, तो वापस करें
  • d[depth, 0] = d[depth,0] और pos का न्यूनतम
  • d[depth, 1] = d[depth,1] और pos का अधिकतम
  • dfs(नोड का बायां, 2*pos, depth+1)
  • dfs(नोड का दायां, 2*pos+1, depth+1)
  • मुख्य विधि से, निम्नलिखित करें:
  • dfs(root)
  • mx := 0
  • d के सभी मानों की सूची में प्रत्येक मिन-मैक्स जोड़े के लिए, करें
    • left := min, right := max
    • mx := mx, right-left+1 का अधिकतम
  • mx वापस करें

बेहतर समझ के लिए निम्नলিখিত कार्यান্বয়ন দেখুন:

উদাহরণ

 

from collections import defaultdict    class TreeNode:       def __init__(self, data, left = None, right = None):          self.data = data          self.left = left          self.right = right class Solution:    def solve(self, root):    d=defaultdict(lambda: [1e9,0])    def dfs(node, pos=0, depth=0):       if not node:          return       d[depth][0]=min(d[depth][0],pos)       d[depth][1]=max(d[depth][1],pos)       dfs(node.left,2*pos,depth+1)       dfs(node.right,2*pos+1,depth+1)    dfs(root)    mx=0    for interval in d.values():       l,r=interval       mx=max(mx,r-l+1)    return mx ob = Solution() root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8) print(ob.solve(root))

इनपुट

root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8)

आउटपुट

2

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

  2. পাইথনে বাইনারি সার্চ ট্রিতে k-তম সবচেয়ে ছোট উপাদান খুঁজে বের করার প্রোগ্রাম

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

  4. পাইথনে বাইনারি ট্রি-র সর্বোচ্চ পারফেক্ট সাবট্রির আকার নির্ণয়