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

पायथन में हम पेड़ को दो पेड़ों में कितने तरीकों से विभाजित कर सकते हैं, यह गिनने का कार्यक्रम

मान लीजिए कि हमारे पास 0, 1 और 2 मान वाले बाइनरी ट्री हैं। रूट में कम से कम एक 0 नोड और एक 1 नोड है। अब मान लीजिए कि एक ऑपरेशन है जहां हम पेड़ में एक किनारे को हटाते हैं और पेड़ दो अलग-अलग पेड़ बन जाते हैं। हमें एक किनारे को हटाने के कई तरीके खोजने होंगे जैसे कि दो पेड़ों में से किसी में भी 0 नोड और 1 नोड दोनों न हों।

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

पायथन में हम पेड़ को दो पेड़ों में कितने तरीकों से विभाजित कर सकते हैं, यह गिनने का कार्यक्रम

तो आउटपुट 1 होगा क्योंकि हम केवल 0 से 2 किनारे को हटा सकते हैं।

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

  • गिनती:=[0, 0, 0]
  • एक फ़ंक्शन को परिभाषित करें dfs() । यह नोड लेगा
  • यदि नोड रिक्त नहीं है, तो
    • पूर्व :=गणना
    • dfs(नोड के बाएं)
    • dfs(नोड के दाएं)
    • गिनती[नोड का मान] :=गिनती[नोड का मान] + 1
    • node.count :=i के लिए (गिनती[i] - पूर्व[i]) की एक सूची 0 और 1 है
  • एक फ़ंक्शन परिभाषित करें dfs2() । यह नोड ले जाएगा, बराबर
  • यदि नोड रिक्त नहीं है, तो
    • यदि बराबर शून्य नहीं है, तो
      • (a0, a1) :=नोड की संख्या
      • (b0, b1) :=(गिनती[0] - a0, गिनती[1] - a1)
      • यदि (a0 0 के समान है या a1 0 के समान है) और (b0 0 के समान है या b1 0 के समान है), तो
        • उत्तर:=उत्तर + 1
    • dfs2 (नोड के बाएं, नोड)
    • dfs2 (नोड का दायां, नोड)
  • मुख्य विधि से, निम्न कार्य करें -
  • dfs(रूट)
  • उत्तर:=0
  • dfs2(रूट)
  • वापसी उत्तर

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

उदाहरण

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):
      count = [0, 0, 0]
   def dfs(node):
      if node:
         pre = count[:]
         dfs(node.left)
         dfs(node.right)
         count[node.val] += 1
         node.count = [count[i] - pre[i] for i in range(2)]
   dfs(root)
   def dfs2(node, par=None):
      if node:
         if par is not None:
            a0, a1 = node.count
            b0, b1 = count[0] - a0, count[1] - a1
            if (a0 == 0 or a1 == 0) and (b0 == 0 or b1 == 0):
               self.ans += 1
         dfs2(node.left, node)
         dfs2(node.right, node)
   self.ans = 0
   dfs2(root)
   return self.ans
ob = Solution()
root = TreeNode(0)
root.left = TreeNode(0)
root.right = TreeNode(2)
root.right.left = TreeNode(1)
root.right.right = TreeNode(1)
print(ob.solve(root))

इनपुट

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

आउटपुट

1

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

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

  1. यह जांचने के लिए कार्यक्रम कि हम कितने तरीकों से अजगर में एक मैट्रिक्स की खाली कोशिकाओं को चुन सकते हैं

    मान लीजिए कि हमारे पास एक एन एक्स एन बाइनरी मैट्रिक्स है जहां 0 खाली कोशिकाओं के लिए है और 1 एक अवरुद्ध सेल है, हमें एन खाली कोशिकाओं को चुनने के तरीकों की संख्या का पता लगाना होगा जैसे कि प्रत्येक पंक्ति और प्रत्येक कॉलम में कम से कम एक चुना हुआ सेल हो। यदि उत्तर बहुत बड़ा है तो वापसी परिणाम मॉड 10

  1. पायथन में हम पेड़ को दो पेड़ों में कितने तरीकों से विभाजित कर सकते हैं, यह गिनने का कार्यक्रम

    मान लीजिए कि हमारे पास 0, 1 और 2 मान वाले बाइनरी ट्री हैं। रूट में कम से कम एक 0 नोड और एक 1 नोड है। अब मान लीजिए कि एक ऑपरेशन है जहां हम पेड़ में एक किनारे को हटाते हैं और पेड़ दो अलग-अलग पेड़ बन जाते हैं। हमें एक किनारे को हटाने के कई तरीके खोजने होंगे जैसे कि दो पेड़ों में से किसी में भी 0 नोड और