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

पायथन में समान बाएँ और दाएँ उपप्रकार वाले सबसे बड़े उपट्री का पता लगाएं


मान लीजिए कि हमारे पास एक बाइनरी ट्री है; हमें सबसे बड़ा सबट्री ढूंढना है जिसमें समान बाएँ और दाएँ सबट्री हों। पसंदीदा समय जटिलता O(n) है।

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

पायथन में समान बाएँ और दाएँ उपप्रकार वाले सबसे बड़े उपट्री का पता लगाएं

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

पायथन में समान बाएँ और दाएँ उपप्रकार वाले सबसे बड़े उपट्री का पता लगाएं

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

  • फ़ंक्शन को हल करें () परिभाषित करें। यह रूट लेगा, एनकोड करेगा, मैक्ससाइज करेगा, मैक्सनोड करेगा

  • अगर जड़ कोई नहीं है, तो

    • वापसी 0

  • left_list :=एक रिक्त स्ट्रिंग वाली सूची

  • right_list :=एक रिक्त स्ट्रिंग वाली सूची

  • ls :=हल करें (root.left, left_list, maxSize, maxNode)

  • rs :=हल करें (root.right, right_list, maxSize, maxNode)

  • आकार :=ls + rs + 1

  • अगर left_list[0], right_list[0] के समान है, तो

    • यदि आकार> अधिकतम आकार [0], तो

      • अधिकतम आकार [0] :=आकार

      • मैक्सनोड [0]:=रूट

  • सांकेतिक शब्दों में बदलना [0]:=सांकेतिक शब्दों में बदलना [0] संक्षिप्त "|" संयोजित करें left_list[0] संक्षिप्त करें "|"

  • सांकेतिक शब्दों में बदलना [0]:=सांकेतिक शब्दों में बदलना [0] संक्षिप्त "|" concatenate str(root.data) concatenate "|"

  • सांकेतिक शब्दों में बदलना [0]:=सांकेतिक शब्दों में बदलना [0] संक्षिप्त "|" सम्‍मिलित करें right_list[0] संक्षिप्त करें "|"

  • वापसी का आकार

  • मुख्य विधि से, निम्न कार्य करें -

  • अधिकतम:=[0]

  • सांकेतिक शब्दों में बदलना:=एक रिक्त स्ट्रिंग के साथ सूची

  • हल करें (नोड, एनकोड, मैक्सिमम, मैक्सनोड)

  • अधिकतम वापसी

उदाहरण

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

class TreeNode:
   def __init__(self, data):
      self.data = data
      self.left = self.right = None
def solve(root, encode, maxSize, maxNode):
   if (root == None):
      return 0
   left_list = [""]
   right_list = [""]
   ls = solve(root.left, left_list, maxSize, maxNode)
   rs = solve(root.right, right_list, maxSize, maxNode)
   size = ls + rs + 1
   if (left_list[0] == right_list[0]):
      if (size > maxSize[0]):
         maxSize[0] = size
         maxNode[0] = root
   encode[0] = encode[0] + "|" + left_list[0] + "|"
   encode[0] = encode[0] + "|" + str(root.data) + "|"
   encode[0] = encode[0] + "|" + right_list[0] + "|"

   return size

def largestSubtree(node, maxNode):
   maximum = [0]
   encode = [""]
   solve(node, encode, maximum,maxNode)
   return maximum
root = TreeNode(55)
root.left = TreeNode(15)
root.right = TreeNode(70)
root.left.left = TreeNode(10)
root.left.right = TreeNode(25)
root.right.left = TreeNode(75)
root.right.left.left = TreeNode(65)
root.right.left.right = TreeNode(80)
root.right.right = TreeNode(75)
root.right.right.left = TreeNode(65)
root.right.right.right = TreeNode(80)
maxNode = [None]
maximum = largestSubtree(root, maxNode)
print("Root of largest sub-tree",maxNode[0].data)
print("and its size is ", maximum)

इनपुट

root = TreeNode(55)
root.left = TreeNode(15)
root.right = TreeNode(70)
root.left.left = TreeNode(10)
root.left.right = TreeNode(25)
root.right.left = TreeNode(75)
root.right.left.left = TreeNode(65)
root.right.left.right = TreeNode(80)
root.right.right = TreeNode(75)
root.right.right.left = TreeNode(65)
root.right.right.right = TreeNode(80)

आउटपुट

Root of largest sub-tree 70
and its size is [7]
. है
  1. पायथन में बाइनरी ट्री के किसी भी पथ का सबसे बड़ा योग खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें रूट नोड से लीफ नोड तक जाने वाले किसी भी पथ का सबसे बड़ा योग ज्ञात करना है। तो, अगर इनपुट पसंद है तो रूट से आउटपुट 29 होगा, अगर हम 5-<9-<7-<8 पथ का अनुसरण करते हैं तो यह जोड़ के बाद 29 हो जाएगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे- फंक

  1. पायथन में दिए गए बाइनरी ट्री में सबसे बड़ा पूर्ण उपट्री खोजें

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें इस बाइनरी ट्री में अधिकतम पूर्ण उप-वृक्ष का आकार खोजना होगा। जैसा कि हम जानते हैं कि एक पूर्ण बाइनरी ट्री एक बाइनरी ट्री है यदि सभी स्तर पूरी तरह से बिना संभावित अंतिम स्तर के भरे हुए हैं और अंतिम स्तर में यथासंभव सभी कुंजियाँ हैं। तो, अगर इनपुट पसंद है

  1. पायथन में दिए गए बाइनरी ट्री में सबसे बड़ा परफेक्ट सबट्री खोजें

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