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

पायथन में दिए गए बाइनरी ट्री में BST मौजूद है या नहीं यह पता लगाने के लिए प्रोग्राम

मान लीजिए हमें एक बाइनरी ट्री दिया गया है। हमें ट्री से सबसे बड़े सबट्री का पता लगाना है जो कि बाइनरी सर्च ट्री (BST) है। हम BST का रूट नोड लौटाते हैं।

पायथन में दिए गए बाइनरी ट्री में BST मौजूद है या नहीं यह पता लगाने के लिए प्रोग्राम

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

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

पायथन में दिए गए बाइनरी ट्री में BST मौजूद है या नहीं यह पता लगाने के लिए प्रोग्राम

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

  • सी :=0
  • एम:=शून्य
  • एक फ़ंक्शन रिकर्स () को परिभाषित करें। यह नोड लेगा
    • यदि नोड रिक्त नहीं है, तो
      • बाएं_वल:=रिकर्स (नोड के बाएं)
      • right_val :=recurse(नोड के दाएं)
      • गिनती :=ऋणात्मक अनंतता
      • अगर (नोड.लेफ्ट अशक्त या नोड.लेफ्ट.वैल <=नोड.वैल के समान है) और (नोड का दायां अशक्त या नोड के समान है। वैल <=नोड.राइट.वैल), तो
        • गिनती:=लेफ्ट_वैल + राइट_वल + 1
      • अगर गिनती> सी, तो
        • सी :=गिनती
        • एम:=नोड
      • वापसी की संख्या
    • वापसी 0
  • रिकर्स (रूट)
  • वापसी मी

उदाहरण

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

class TreeNode:
   def __init__(self, val, left = None, right = None):
      self.val = val
      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

def print_tree(root):
   if root is not None:
      print_tree(root.left)
      print(root.val, end = ', ')
      print_tree(root.right)

def solve(root):
   c, m = 0, None

   def recurse(node):
      if node:
         nonlocal c, m
         left_val = recurse(node.left)
         right_val = recurse(node.right)
         count = -float("inf")
         if (node.left == None or node.left.val <= node.val) and (node.right == None or node.val <= node.right.val):
            count = left_val + right_val + 1
         if count > c:
            c = count
            m = node
         return count
      return 0

   recurse(root)
   return m

tree = make_tree([1, 4, 6, 3, 5])
print_tree(solve(tree))

इनपुट

tree = make_tree([1, 4, 6, 3, 5])
print_tree(solve(tree))

आउटपुट

3, 4, 5,

  1. पायथन में बाइनरी ट्री नोड के सहोदर मूल्य को खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक मान k और एक बाइनरी सर्च ट्री है, यहाँ प्रत्येक नोड या तो एक पत्ता है या इसमें 2 बच्चे हैं। हमें k मान वाले नोड को खोजना होगा, और उसके भाई-बहन का मान लौटाना होगा। तो, अगर इनपुट पसंद है k =4, तो आउटपुट 10 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - उपयोग()

  1. पायथन में एक पेड़ के सबसे गहरे नोड को खोजने का कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें सबसे गहरे नोड का मान ज्ञात करना होगा। यदि एक से अधिक गहरे नोड हैं, तो सबसे बाएं सबसे गहरे नोड को वापस करें। तो, अगर इनपुट पसंद है तो आउटपुट 4 होगा क्योंकि 4 और 7 सबसे गहरे हैं लेकिन 4 सबसे ज्यादा बचे हैं। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे

  1. पायथन में एक बाइनरी ट्री पर k-लंबाई पथ खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है जिसमें अद्वितीय मान हैं और हमारे पास एक और मान k भी है, तो हमें ट्री में k-लंबाई वाले अद्वितीय पथों की संख्या ज्ञात करनी होगी। रास्ते माता-पिता से बच्चे तक या बच्चे से माता-पिता तक जा सकते हैं। हम दो रास्तों पर विचार करेंगे जब एक पथ में कुछ नोड दिखाई देते हैं