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

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

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

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

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

तो आउटपुट 4 आकार के रूप में होगा और इनऑर्डर ट्रैवर्सल 10, 45, 60, 70,

होगा

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

  • isComplete, isPerfect जैसे कुछ मापदंडों के साथ वापसी प्रकार को परिभाषित करें, ये शुरू में झूठे हैं, फिर आकार और रूटट्री, आकार शुरू में 0 है और रूटट्री शून्य है।
  • ret_type :=returnType
  • यदि रूट रिक्त है, तो
    • ret_type.isPerfect :=True
    • ret_type.isComplete :=True
    • ret_type.size:=0
    • ret_type.rootTree :=कोई नहीं
    • रिटर्न रिट_टाइप
  • left_tree :=checkCompletness(root.left)
  • right_tree :=checkCompletness(root.right)
  • अगर (left_tree.isPerfect सही है और right_tree.isComplete सही है और बाएं और दाएं पेड़ की ऊंचाई समान है, तो
    • ret_type.isComplete :=True
    • ret_type.isPerfect :=right_tree.isPerfect
    • ret_type.size:=left_tree.size + right_tree.size + 1
    • ret_type.rootTree :=root
    • रिटर्न रिट_टाइप
  • अगर (left_tree.isComplete is True और right_tree.isPerfect सही है और बाएं और दाएं पेड़ की ऊंचाई समान है, तो
    • ret_type.isComplete :=True
    • ret_type.isPerfect :=False
    • ret_type.size:=left_tree.size + right_tree.size + 1
    • ret_type.rootTree :=root
    • रिटर्न रिट_टाइप
  • ret_type.isPerfect :=False
  • ret_type.isComplete:=असत्य
  • ret_type.size :=अधिकतम left_tree.size, right_tree.size
  • अगर left_tree.size> right_tree.size, तो
    • ret_type.rootTree :=left_tree.rootTree
  • अन्यथा,
    • ret_type.rootTree :=right_tree.rootTree
  • रिटर्न रिट_टाइप

पायथन

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

import math
class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
class returnType :
   def __init__(self):
      self.isPerfect = None
      self.isComplete = None
      self.size = 0
      self.rootTree = None
def getHeight(size):
   return int(math.ceil(math.log(size + 1)/math.log(2)))
def checkCompleteness(root) :
   ret_type = returnType()
   if (root == None):
      ret_type.isPerfect = True
      ret_type.isComplete = True
      ret_type.size = 0
      ret_type.rootTree = None
      return ret_type
   left_tree = checkCompleteness(root.left)
   right_tree = checkCompleteness(root.right)
   if (left_tree.isPerfect == True and right_tree.isComplete == True and getHeight(left_tree.size) == getHeight(right_tree.size)) :
      ret_type.isComplete = True
      ret_type.isPerfect = right_tree.isPerfect
      ret_type.size = left_tree.size + right_tree.size + 1
      ret_type.rootTree = root
      return ret_type
   if (left_tree.isComplete == True and right_tree.isPerfect == True and getHeight(left_tree.size) == getHeight(right_tree.size) + 1):
      ret_type.isComplete = True
      ret_type.isPerfect = False
      ret_type.size = left_tree.size + right_tree.size + 1
      ret_type.rootTree = root
      return ret_type
      ret_type.isPerfect = False
      ret_type.isComplete = False
      ret_type.size =max(left_tree.size, right_tree.size)
      if(left_tree.size > right_tree.size ):
         ret_type.rootTree = left_tree.rootTree
      else:
         ret_type.rootTree = right_tree.rootTree
      return ret_type
def print_tree(root):
   if root is not None:
      print_tree(root.left)
      print(root.data, end = ', ')
      print_tree(root.right)
root = TreeNode(50)
root.left = TreeNode(30)
root.right = TreeNode(60)
root.left.left = TreeNode(5)
root.left.right = TreeNode(20)
root.right.left = TreeNode(45)
root.right.right = TreeNode(70)
root.right.left.left = TreeNode(10)
ans = checkCompleteness(root)
print( "Size:" , ans.size )
print("Inorder Traversal: ", end = '')
print_tree(ans.rootTree)

इनपुट

root = TreeNode(50)
root.left = TreeNode(30)
root.right = TreeNode(60)
root.left.left = TreeNode(5)
root.left.right = TreeNode(20)
root.right.left = TreeNode(45)
root.right.right = TreeNode(70)
root.right.left.left = TreeNode(10)

आउटपुट:

Size: 4
Inorder Traversal: 10, 45, 60, 70,

  1. पता करें कि बाइनरी ट्री का दिया गया वर्टिकल लेवल पायथन में सॉर्ट किया गया है या नहीं

    मान लीजिए कि हमारे पास बाइनरी ट्री है; हमें यह जांचना है कि बाइनरी ट्री का दिया गया वर्टिकल लेवल सॉर्ट किया गया है या नहीं। जब दो नोड्स ओवरलैप हो रहे हों, तो जांचें कि वे जिस स्तर से संबंधित हैं, उसी क्रम में क्रमबद्ध हैं। तो, अगर इनपुट l =-1 जैसा है तब आउटपुट ट्रू होगा, क्योंकि लेवल -1 में एलिम

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

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

  1. एक सरणी में सबसे बड़ा तत्व खोजने के लिए पायथन प्रोग्राम

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