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

पायथन में बाइनरी सर्च ट्री को मान्य करें


मान लीजिए कि हमारे पास एक बाइनरी ट्री है, यह जांचने के लिए निर्धारित करें कि यह एक वैध बाइनरी सर्च ट्री (BST) है या नहीं। मान लें कि एक बीएसटी को इस प्रकार परिभाषित किया गया है -

  • नोड का बायां सबट्री नोड की कुंजी से छोटी कुंजियों वाली केवल नोड रखता है।
  • नोड का दायां सबट्री नोड की कुंजी से बड़ी कुंजियों वाले केवल नोड रखता है।
  • बाएं और दाएं दोनों उपवृक्ष भी द्विआधारी खोज वृक्ष होने चाहिए।

तो अगर पेड़ ऐसा है -

पायथन में बाइनरी सर्च ट्री को मान्य करें

आउटपुट सही होगा।

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

  • एक पुनरावर्ती फ़ंक्शन बनाएं जिसे हल () कहा जाता है, यह रूट, न्यूनतम और अधिकतम लेगा, विधि इस तरह होगी
  • अगर रूट शून्य है, तो सही लौटें
  • यदि रूट का मान <=न्यूनतम या रूट का मान>=अधिकतम, तो गलत लौटाएं
  • रिटर्न (समाधान (रूट के बाएं, न्यूनतम, मूल मान) और हल करें (रूट का अधिकार, मूल मान, अधिकतम))
  • रूट को पास करके हल () विधि को प्रारंभ में कॉल करें, और - inf को min और inf को अधिकतम करें।

उदाहरण (पायथन)

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

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
def insert(temp,data):
   que = []
   que.append(temp)
   while (len(que)):
      temp = que[0]
      que.pop(0)
      if (not temp.left):
         if data is not None:
            temp.left = TreeNode(data)
         else:
            temp.left = TreeNode(0)
         break
      else:
         que.append(temp.left)
      if (not temp.right):
         if data is not None:
            temp.right = TreeNode(data)
         else:
            temp.right = TreeNode(0)
         break
      else:
         que.append(temp.right)
def make_tree(elements):
   Tree = TreeNode(elements[0])
   for element in elements[1:]:
      insert(Tree, element)
   return Tree
class Solution(object):
   def isValidBST(self, root):
      return self.solve(root,-1000000000000000000000,1000000000000000000000)
   def solve(self,root,min_val,max_val):
      if root == None or root.data == 0:
         return True
      if (root.data <= min_val or root.data >=max_val):
         return False
      return self.solve(root.left,min_val,root.data) and self.solve(root.right,root.data,max_val)
ob1 = Solution()
tree = make_tree([3,1,4,None,2,None,5])
print(ob1.isValidBST(tree))
tree = make_tree([5,1,4,None,None,3,6])
print(ob1.isValidBST(tree))

इनपुट

[3,1,4,null,2,null,5]
[5,1,4,null,null,3,6]

आउटपुट

true
false

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

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

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

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

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

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