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

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


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

तो, अगर इनपुट l =-1 जैसा है

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

तब आउटपुट ट्रू होगा, क्योंकि लेवल -1 में एलिमेंट 3,7 हैं और उन्हें सॉर्ट किया गया है।

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

  • अगर रूट शून्य है, तो

    • सही लौटें

  • पिछला_मान :=-इन्फ़

  • current_level :=0

  • current_node :=मान 0 के साथ एक नया ट्री नोड

  • q नामक एक dequeue परिभाषित करें

  • q के अंत में (रूट, 0) डालें

  • जबकि q खाली नहीं है, करें

    • current_node :=q[0, 0]

    • current_level :=q[0, 1]

    • q के बाएँ से तत्व हटाएं

    • अगर current_level स्तर के समान है, तो

      • अगर पिछला_मान <=current_node.val, तो

        • पिछला_मान :=current_node.val

      • अन्यथा,

        • झूठी वापसी

    • अगर current_node.left शून्य नहीं है, तो

      • q के अंत में (current_node.left, current_level - 1) डालें

    • अगर current_node.right गैर-शून्य है, तो

      • q के अंत में (current_node.right, current_level + 1) डालें

  • सही लौटें

उदाहरण

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

from collections import deque
from sys import maxsize
INT_MIN = -maxsize
class TreeNode:
   def __init__(self, key):
      self.val = key
      self.left = None
      self.right = None
def are_elements_sorted(root, level):
   if root is None:
      return True
   previous_value = INT_MIN
   current_level = 0
   current_node = TreeNode(0)
   q = deque()
   q.append((root, 0))
   while q:
      current_node = q[0][0]
      current_level = q[0][1]
      q.popleft()
      if current_level == level:
         if previous_value <= current_node.val:
            previous_value = current_node.val
         else:
            return False
      if current_node.left:
         q.append((current_node.left, current_level - 1))
      if current_node.right:
         q.append((current_node.right, current_level + 1))
   return True
root = TreeNode(2)
root.left = TreeNode(3)
root.right = TreeNode(6)
root.left.left = TreeNode(8)
root.left.right = TreeNode(5)
root.left.right.left = TreeNode(7)
level = -1
print(are_elements_sorted(root, level))

इनपुट

root = TreeNode(2) root.left = TreeNode(3) root.right = TreeNode(6)
root.left.left = TreeNode(8) root.left.right = TreeNode(5)
root.left.right.left = TreeNode(7)

आउटपुट

True

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

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

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

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

  1. पाइथन में सॉर्ट किए गए ऐरे को बाइनरी सर्च ट्री में कनवर्ट करें

    मान लीजिए कि हमारे पास एक क्रमबद्ध सरणी ए है। हमें एक ऊंचाई-संतुलित बाइनरी खोज उत्पन्न करनी है। इस समस्या में, एक ऊंचाई-संतुलित बाइनरी ट्री वास्तव में एक बाइनरी ट्री है जिसमें प्रत्येक नोड के दो उपप्रकारों की गहराई कभी भी 1 से अधिक भिन्न नहीं होती है। मान लीजिए कि सरणी [-10, -3, 0, 5, 9 की तरह है। ]