Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

यह जांचने के लिए कार्यक्रम कि क्या हम एक पेड़ को रंग सकते हैं जहां किसी भी आसन्न नोड्स का रंग समान नहीं है या नहीं

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

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

यह जांचने के लिए कार्यक्रम कि क्या हम एक पेड़ को रंग सकते हैं जहां किसी भी आसन्न नोड्स का रंग समान नहीं है या नहीं

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

यह जांचने के लिए कार्यक्रम कि क्या हम एक पेड़ को रंग सकते हैं जहां किसी भी आसन्न नोड्स का रंग समान नहीं है या नहीं

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

  • रंग :=एक खाली नक्शा
  • प्रोप:=एक खाली नक्शा
  • एक फ़ंक्शन को परिभाषित करें dfs() । यह नोड, और ध्वज लेगा
  • यदि नोड शून्य है, तो
    • वापसी
  • रंग [नोड का मान] :=रंग [नोड का मान] + 1
  • प्रोप [ध्वज]:=सहारा [ध्वज] + 1
  • dfs (नोड के बाईं ओर, झंडे का उलटा)
  • dfs (नोड का दायां, ध्वज का उलटा)
  • मुख्य विधि से निम्न कार्य करें:
  • dfs(रूट, ट्रू)
  • जब रंग और प्रोप में सभी तत्व समान हों, अन्यथा गलत हो, तो सही लौटें

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

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. यह जाँचने के लिए प्रोग्राम कि क्या किसी पेड़ का क्रमागत क्रम पाइथॉन में पैलिंड्रोम है या नहीं

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है जहां प्रत्येक नोड में 0-9 से एक अंक होता है, हमें यह जांचना होगा कि इसका इन-ऑर्डर ट्रैवर्सल पैलिंड्रोम है या नहीं। तो, अगर इनपुट पसंद है तब आउटपुट ट्रू होगा, क्योंकि इसका इनऑर्डर ट्रैवर्सल [2,6,10,6,2] है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  1. पायथन में बाइनरी ट्री BST है या नहीं, यह जांचने के लिए प्रोग्राम

    मान लीजिए हमारे पास बाइनरी ट्री है; हमें यह जांचना होगा कि यह बाइनरी सर्च ट्री है या नहीं। जैसा कि हम जानते हैं कि बीएसटी में निम्नलिखित गुण होते हैं - इसके बाएँ उपप्रकार के सभी नोड वर्तमान नोड मान से छोटे हैं इसके दाहिने सबट्री के सभी नोड वर्तमान नोड मान से बड़े हैं ये गुण सभी नोड्स के लिए पुनरावर

  1. पायथन में बाइनरी ट्री पूर्ण है या नहीं यह जांचने के लिए प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें यह जांचना होगा कि यह पूर्ण बाइनरी ट्री है या नहीं। जैसा कि हम एक पूर्ण बाइनरी ट्री में जानते हैं कि संभवतः अंतिम को छोड़कर स्तर नोड्स से भरे हुए हैं और अंतिम स्तर में सभी नोड्स जितना संभव हो सके छोड़े गए हैं। तो, अगर इनपुट पसंद है तो आउटपुट सही होगा इ