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

পাইথনে বাইনারি ট্রি রঙিন করা যাবে কিনা যাতে সংলগ্ন নোডগুলোর রঙ এক নহয় তা যাচাই করার প্রোগ্রাম


मान लीजिए हमारे पास एक बाइनरी ट्री है जहां प्रत्येक नोड का मान उसका रंग दर्शाता है। एक ट्री में अधिकतम 2 रंग होते हैं। हमें जांचना है कि क्या नोड्स के रंगों को किसी भी संख्या में स्वैप करना संभव है ताकि कोई दो जुड़े हुए नोड्स का रंग एक न हो।

तो, अगर इनपुट इस तरह है

পাইথনে বাইনারি ট্রি রঙিন করা যাবে কিনা যাতে সংলগ্ন নোডগুলোর রঙ এক নহয় তা যাচাই করার প্রোগ্রাম

तो आउटपुट True होगा क्योंकि हम प्राप्त कर सकते हैं

পাইথনে বাইনারি ট্রি রঙিন করা যাবে কিনা যাতে সংলগ্ন নোডগুলোর রঙ এক নহয় তা যাচাই করার প্রোগ্রাম

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

  • colors := एक खाली मैप
  • prop := एक खाली मैप
  • एक फंक्शन dfs() परिभाषित करें। यह node, और flag लेगा
  • अगर node null है, तो
    • लौटें
  • colors[node का मान] := colors[node का मान] + 1
  • prop[flag] := prop[flag] + 1
  • dfs(node का बायां, flag का उल्टा)
  • dfs(node का दायां, flag का उल्टा)
  • मुख्य विधि से निम्नलिखित करें:
  • dfs(root, true)
  • true लौटाएं जब colors और prop के सभी तत्व समान हों, अन्यथा false

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

উদাহরণ

from collections import defaultdict
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):
        colors = defaultdict(int)
        prop = defaultdict(int)
        def dfs(node, flag=True):
            if not node:
                return
            colors[node.val] += 1
            prop[flag] += 1
            dfs(node.left, not flag)
            dfs(node.right, not flag)
        dfs(root)
        return set(colors.values()) == set(prop.values())

ob = Solution()
root = TreeNode(2)
root.left = TreeNode(2)
root.right = TreeNode(2)
root.right.left = TreeNode(1)
root.right.right = TreeNode(1)
root.right.left.right = TreeNode(1)
print(ob.solve(root))

ইনপুট

root = TreeNode(2) root.left = TreeNode(2) root.right = TreeNode(2) root.right.left = TreeNode(1) root.right.right = TreeNode(1) root.right.left.right = TreeNode(1)

আউটপুট

True

  1. পাইথনে একটি ট্রি অন্য ট্রির সাবট্রি কিনা যাচাই করা

  2. পাইথনে ট্রির ইনঅর্ডার সিকোয়েন্স প্যালিনড্রোম কিনা যাচাই করার প্রোগ্রাম

  3. পাইথনে বাইনারি ট্রি BST কিনা যাচাই করার প্রোগ্রাম

  4. পাইথনে বাইনারি ট্রি কমপ্লিট কিনা যাচাই করার প্রোগ্রাম