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

पायथन में एक पेड़ में विशेष नोड्स का पता लगाने का कार्यक्रम

मान लीजिए कि हमारे पास 'ट्री' नामक मूल्यों की एक 2D सूची है जो एक n-ary पेड़ का प्रतिनिधित्व करती है और 'रंग' नामक मूल्यों की एक और सूची है। पेड़ को एक आसन्न सूची के रूप में दर्शाया गया है और इसकी जड़ पेड़ [0] है।

i-वें नोड की विशेषताएं -

  • पेड़ [i] इसके बच्चे और माता-पिता हैं।

  • रंग [i] इसका रंग है।

हम एक नोड एन को "विशेष" कहते हैं यदि उपट्री में प्रत्येक नोड जिसका रूट एन पर है, का एक अनूठा रंग है। तो हमारे पास यह पेड़ है, हमें विशेष नोड्स की संख्या का पता लगाना है।

So, if the input is like tree = [
   [1,2],
   [0],
   [0,3],
   [2]
]

रंग =[1, 2, 1, 1], तो आउटपुट 2 होगा।

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

  • परिणाम:=0

  • dfs(0, -1)

  • वापसी परिणाम

  • एक फ़ंक्शन check_intersection() परिभाषित करें। यह रंग लेगा, child_colors

    • अगर लंबाई (रंग) <लंबाई (child_colors) है, तो

      • रंगों में प्रत्येक c के लिए, करें

        • अगर c चाइल्ड_कलर्स में गैर-शून्य है, तो

          • सही लौटें

    • अन्यथा,

      • प्रत्येक c के लिए child_colors में, करें

        • अगर c चाइल्ड_कलर्स में मौजूद है, तो

          • सही लौटें

  • फ़ंक्शन को परिभाषित करें dfs() । यह नोड लेगा, पिछला

    • रंग :={रंग [नोड]}

    • पेड़ में प्रत्येक बच्चे के लिए[नोड], करें

      • अगर बच्चा पिछला जैसा नहीं है, तो

        • Child_colors :=dfs (बच्चा, नोड)

        • अगर रंग और बच्चे_रंग खाली नहीं हैं, तो

          • अगर check_intersection(colors,child_colors) गैर-शून्य है, तो

            • रंग :=शून्य

          • अन्यथा,

            • यदि लंबाई (रंगों) <की लंबाई (child_colors) है, तो,

              • Child_colors :=child_colors OR कलर्स

              • रंग :=child_colors

            • अन्यथा,

              • रंग :=रंग या बच्चे_रंग

        • अन्यथा,

          • रंग :=शून्य

      • अगर रंग खाली नहीं हैं, तो

        • परिणाम:=परिणाम + 1

      • रंग लौटाएं

उदाहरण

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

import collections
class Solution:
   def solve(self, tree, color):
      self.result = 0
      def dfs(node, prev):
         colors = {color[node]}
         for child in tree[node]:
            if child != prev:
               child_colors = dfs(child, node)
               if colors and child_colors:
                  if self.check_intersection(colors, child_colors):
                     colors = None
                  else:
                     if len(colors) < len(child_colors):
                        child_colors |= colors
                        colors = child_colors
                     else:
                        colors |= child_colors
                  else:
                     colors = None
            if colors:
               self.result += 1
            return colors
         dfs(0, -1)
         return self.result
      def check_intersection(self, colors, child_colors):
         if len(colors) < len(child_colors):
            for c in colors:
               if c in child_colors:
                  return True
         else:
            for c in child_colors:
               if c in colors:
                  return True
ob = Solution()
print(ob.solve( [
   [1,2],
   [0],
   [0,3],
   [2]
], [1, 2, 1, 1]))

इनपुट

[
   [1,2],
   [0],
   [0,3],
   [2]
], [1, 2, 1, 1]

आउटपुट

2

  1. पायथन का उपयोग करके बाइनरी ट्री में दाईं ओर नोड का पता लगाने का कार्यक्रम

    मान लीजिए, हमें एक बाइनरी ट्री प्रदान किया जाता है। हमें एक नोड (u नाम दिया गया) के लिए एक पॉइंटर भी दिया जाता है और हमें दिए गए नोड के ठीक दाईं ओर स्थित नोड को खोजना होता है। दिए गए नोड के दाईं ओर स्थित नोड समान स्तर पर रहना चाहिए और दिया गया नोड या तो लीफ नोड या आंतरिक नोड हो सकता है। तो, अगर इनप

  1. पायथन में एक एन-आरी पेड़ का व्यास खोजने का कार्यक्रम

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

  1. पायथन में एक एन-आरी पेड़ की जड़ खोजने का कार्यक्रम

    मान लीजिए, हमें एक सरणी में n-ary पेड़ के नोड दिए गए हैं। हमें पेड़ के रूट नोड को फिर से ढूंढकर वापस करना है। पूर्ण वृक्ष को पूर्व-आदेश संकेतन में लौटाए गए नोड से प्रदर्शित किया जाना है। तो, अगर इनपुट पसंद है तो आउटपुट होगा [14, 27, 32, 42, 56, 65] हम पेड़ के पूर्व-आदेश ट्रैवर्सल को प्रदर्शित क