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

जांचें कि क्या दिया गया बाइनरी ट्री पायथन में हीप है

मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें जांचना है कि यह ढेर है या नहीं। ढेर में निम्नलिखित गुण हैं:ढेर एक द्विआधारी वृक्ष होगा वह वृक्ष एक पूर्ण वृक्ष होना चाहिए (इसलिए अंतिम को छोड़कर सभी स्तर पूर्ण होना चाहिए)। उस पेड़ का प्रत्येक नोड मान उसके चाइल्ड नोड (अधिकतम-ढेर) से अधिक या उसके बराबर होना चाहिए।

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

जांचें कि क्या दिया गया बाइनरी ट्री पायथन में हीप है

तब आउटपुट सही होगा

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

  • फ़ंक्शन को परिभाषित करें number_of_nodes() । यह जड़ लेगा
  • यदि रूट रिक्त है, तो
    • वापसी 0
  • अन्यथा,
    • वापसी(1 + number_of_nodes(root.left) + number_of_nodes(root.right))
  • एक फ़ंक्शन को परिभाषित करें has_heap_property() । यह जड़ लेगा
  • यदि root.left null है और root.right null है, तो
    • सही लौटें
  • यदि root.right शून्य है, तो
    • सही लौटें जब root.val>=root.left.val
  • अन्यथा,
    • अगर (root.val>=root.left.val और root.val>=root.right.val, तो
      • रिटर्न(has_heap_property(root.left) and has_heap_property(root.right))
    • अन्यथा,
      • झूठी वापसी
  • एक फ़ंक्शन परिभाषित करें is_complete_tree() । यह रूट, इंडेक्स, नोड_काउंट लेगा
  • यदि रूट रिक्त है, तो
    • सही लौटें
  • अगर इंडेक्स>=नोड_काउंट, तो
    • झूठी वापसी
  • वापसी (is_complete_tree(root.left, 2 * index + 1, node_count) and is_complete_tree(root.right, 2 * index + 2, node_count))
  • मुख्य विधि से निम्न कार्य करें -
  • नोड_काउंट:=number_of_nodes()
  • यदि is_complete_tree(root, 0, node_count) and has_heap_property(root) गैर-शून्य है, तो
    • सही लौटें
  • अन्यथा,
    • झूठी वापसी

उदाहरण

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

class TreeNode:
   def __init__(self, value):
      self.val = value
      self.left = None
      self.right = None
   def number_of_nodes(self, root):
      if root is None:
         return 0
      else:
         return (1 + self.number_of_nodes(root.left) + self.number_of_nodes(root.right))
   def has_heap_property(self, root):
      if (root.left is None and root.right is None):
         return True
      if root.right is None:
         return root.val >= root.left.val
      else:
         if (root.val >= root.left.val and
            root.val >= root.right.val):
            return (self.has_heap_property(root.left) and self.has_heap_property(root.right))
         else:
            return False
   def is_complete_tree(self, root,index, node_count):
      if root is None:
         return True
      if index >= node_count:
         return False
      return (self.is_complete_tree(root.left, 2 * index + 1, node_count) and self.is_complete_tree(root.right, 2 * index + 2, node_count))
   def is_heap(self):
      node_count = self.number_of_nodes(self)
      if (self.is_complete_tree(self, 0, node_count) and self.has_heap_property(self)):
         return True
      else:
         return False
root = TreeNode(99)
root.left = TreeNode(46)
root.right = TreeNode(39)
root.left.left = TreeNode(14)
root.left.right = TreeNode(5)
root.right.left = TreeNode(9)
root.right.right = TreeNode(33)
root.left.left.left = TreeNode(7)
root.left.left.right = TreeNode(12)
print(root.is_heap())

इनपुट

root = TreeNode(99)
root.left = TreeNode(46)
root.right = TreeNode(39)
root.left.left = TreeNode(14)
root.left.right = TreeNode(5)
root.right.left = TreeNode(9)
root.right.right = TreeNode(33)
root.left.left.left = TreeNode(7)
root.left.left.right = TreeNode(12)

आउटपुट

True

  1. पायथन में बाइनरी ट्री ज़िगज़ैग लेवल ऑर्डर ट्रैवर्सल

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें ज़िगज़ैग लेवल ऑर्डर ट्रैवर्सल ढूंढना होगा। तो पहली पंक्ति के लिए, बाएं से दाएं स्कैन करें, फिर दूसरी पंक्ति से दाएं से बाएं, फिर बाएं से दाएं और इसी तरह। तो अगर पेड़ जैसा है - ट्रैवर्सल अनुक्रम [[3],[20,9],[15,7]] होगा इसे हल करने के लिए, हम इन चरणो

  1. पायथन में एक बाइनरी ट्री का सबसे कम सामान्य पूर्वज

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें दो दिए गए नोड्स के सबसे कम सामान्य पूर्वज नोड्स को खोजना होगा। दो नोड्स p और q का LCA वास्तव में पेड़ में सबसे कम नोड के रूप में होता है जिसमें p और q दोनों डीसेंटेंट होते हैं। तो अगर बाइनरी ट्री [3,5,1,6,2,0,8,null,null,7,4] जैसा है। पेड़ जैसा होगा -

  1. पायथन में बाइनरी ट्री को उल्टा करें

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