কম্পিউটার

পাইথনে বাইনারি অনুসন্ধান ট্রি যাচাই করুন


ধরুন আমাদের একটি বাইনারি ট্রি আছে, এটি একটি বৈধ বাইনারি সার্চ ট্রি (BST) কিনা তা পরীক্ষা করার জন্য নির্ধারণ করুন৷ অনুমান করুন একটি BST নিম্নরূপ সংজ্ঞায়িত করা হয়েছে –

  • একটি নোডের বাম সাবট্রিতে নোডের কী থেকে ছোট কীগুলির সাথে শুধুমাত্র নোড থাকে৷
  • একটি নোডের ডান সাবট্রিতে নোডের কী থেকে বড় কী সহ শুধুমাত্র নোড থাকে৷
  • বাম এবং ডান উভয় সাবট্রিও অবশ্যই বাইনারি সার্চ ট্রি হতে হবে।

তাই যদি গাছের মত হয় –

পাইথনে বাইনারি অনুসন্ধান ট্রি যাচাই করুন

আউটপুট সত্য হবে।

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

  • সলভ() নামক একটি পুনরাবৃত্ত ফাংশন তৈরি করুন, এটি রুট, মিন এবং সর্বোচ্চ নেবে, পদ্ধতিটি এরকম হবে
  • যদি রুট শূন্য হয়, তাহলে সত্য ফেরত দিন
  • যদি root-এর মান <=min বা root-এর মান>=max হয়, তাহলে false দিন
  • (সমাধান (মূলের বামে, মিন, মূল মান) এবং সমাধান (মূলের ডান, মূল মান, সর্বোচ্চ)) ফেরত দিন
  • সল্ভ() পদ্ধতিতে কল করুন প্রাথমিকভাবে, রুট পাস করে, এবং – inf হিসাবে min এবং inf হিসাবে max।

উদাহরণ(পাইথন)

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

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. একটি প্রদত্ত বাইনারি ট্রি পাইথনে হিপ কিনা তা পরীক্ষা করুন

  2. পাইথনে একটি বাইনারি অনুসন্ধান গাছের সর্বনিম্ন সাধারণ পূর্বপুরুষ

  3. পাইথনে বাইনারি ট্রি ইনভার্ট করুন

  4. পাইথনে বাইনারি সার্চ ট্রিতে সাজানো অ্যারেকে রূপান্তর করুন