কম্পিউটার

পাইথনের একটি প্রদত্ত বাইনারি গাছে একটি BST উপস্থিত আছে কিনা তা খুঁজে বের করার জন্য প্রোগ্রাম


ধরুন আমাদের একটি বাইনারি গাছ দেওয়া হল। আমাদের গাছ থেকে সবচেয়ে বড় সাবট্রি খুঁজে বের করতে হবে যা বাইনারি সার্চ ট্রি (BST)। আমরা BST এর রুট নোড ফেরত দিই।

পাইথনের একটি প্রদত্ত বাইনারি গাছে একটি BST উপস্থিত আছে কিনা তা খুঁজে বের করার জন্য প্রোগ্রাম

সুতরাং, যদি ইনপুট মত হয়

তাহলে আউটপুট হবে −

পাইথনের একটি প্রদত্ত বাইনারি গাছে একটি BST উপস্থিত আছে কিনা তা খুঁজে বের করার জন্য প্রোগ্রাম

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • c :=0
  • m :=শূন্য
  • একটি ফাংশন recurse() সংজ্ঞায়িত করুন। এটি নোড
      নেবে
    • যদি নোড নাল না হয়, তাহলে
      • left_val :=recurse(নোডের বামে)
      • right_val :=recurse (নোডের ডানদিকে)
      • গণনা :=ঋণাত্মক অসীম
      • যদি (node.left null বা node.left.val <=node.val) এবং (নোডের ডানদিকে null বা node.val <=node.right.val সমান), তাহলে
        • গণনা :=left_val + right_val + 1
      • যদি গণনা> c, তারপর
        • c :=গণনা
        • m :=নোড
      • রিটার্ন গণনা
    • রিটার্ন 0
  • রিকারস(রুট)
  • রিটার্ন m

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

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. পাইথনে বাইনারি ট্রিতে দ্বিতীয় গভীরতম নোড খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে একটি বাইনারি ট্রি নোডের ভাইবোনের মান খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে একটি গাছের বাম গভীরতম নোড খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে একটি বাইনারি গাছে কে-দৈর্ঘ্যের পাথ খুঁজে বের করার জন্য প্রোগ্রাম