কম্পিউটার

পাইথনে একটি প্রদত্ত বাইনারি ট্রিতে বৃহত্তম সম্পূর্ণ সাবট্রি খুঁজুন


ধরুন আমাদের একটি বাইনারি ট্রি আছে; আমাদের এই বাইনারি ট্রিতে সর্বাধিক সম্পূর্ণ সাব-ট্রির আকার খুঁজে বের করতে হবে। আমরা জানি যে একটি সম্পূর্ণ বাইনারি ট্রি হল একটি বাইনারি ট্রি যদি সমস্ত স্তরগুলি সম্ভবত চূড়ান্ত স্তর ছাড়াই সম্পূর্ণরূপে পূর্ণ হয় এবং চূড়ান্ত স্তরে যতটা সম্ভব সমস্ত কীগুলি থাকে৷

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

পাইথনে একটি প্রদত্ত বাইনারি ট্রিতে বৃহত্তম সম্পূর্ণ সাবট্রি খুঁজুন

তারপর আউটপুট আকার হিসাবে 4 হবে এবং ইনঅর্ডার ট্রাভার্সাল হবে 10, 45, 60, 70,

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

  • ইসকমপ্লিট, ইসপারফেক্টের মতো কয়েকটি প্যারামিটার দিয়ে রিটার্নের ধরন সংজ্ঞায়িত করুন, এগুলি প্রাথমিকভাবে মিথ্যা, তারপর আকার এবং রুটট্রি, আকার প্রাথমিকভাবে 0 এবং রুটট্রি শূন্য।
  • ret_type :=returnType
  • যদি রুট নাল হয়, তাহলে
    • ret_type.isPerfect :=সত্য
    • ret_type.isComplete :=সত্য
    • ret_type.size :=0
    • ret_type.rootTree :=কোনটিই নয়
    • রিটার্ন_টাইপ
  • left_tree :=check Completeness(root.left)
  • right_tree :=check Completeness(root.right)
  • যদি (left_tree.isPerfect হয় True এবং right_tree.isComplete হয় True এবং বাম ও ডান গাছের উচ্চতা একই হয়, তাহলে
    • ret_type.isComplete :=সত্য
    • ret_type.isPerfect :=right_tree.isPerfect
    • ret_type.size :=left_tree.size + right_tree.size + 1
    • ret_type.rootTree :=রুট
    • রিটার্ন_টাইপ
  • যদি (left_tree.isComplete হয় True এবং right_tree.isPerfect সত্য হয় এবং বাম ও ডান গাছের উচ্চতা একই হয়, তাহলে
    • ret_type.isComplete :=সত্য
    • ret_type.isPerfect :=মিথ্যা
    • ret_type.size :=left_tree.size + right_tree.size + 1
    • ret_type.rootTree :=রুট
    • রিটার্ন_টাইপ
  • ret_type.isPerfect :=মিথ্যা
  • ret_type.isComplete :=মিথ্যা
  • ret_type.size :=সর্বোচ্চ left_tree.size, right_tree.size
  • যদি left_tree.size> right_tree.size, তাহলে
    • ret_type.rootTree :=left_tree.rootTree
  • অন্যথায়,
    • ret_type.rootTree :=right_tree.rootTree
  • রিটার্ন_টাইপ

পাইথন

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

import math
class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
class returnType :
   def __init__(self):
      self.isPerfect = None
      self.isComplete = None
      self.size = 0
      self.rootTree = None
def getHeight(size):
   return int(math.ceil(math.log(size + 1)/math.log(2)))
def checkCompleteness(root) :
   ret_type = returnType()
   if (root == None):
      ret_type.isPerfect = True
      ret_type.isComplete = True
      ret_type.size = 0
      ret_type.rootTree = None
      return ret_type
   left_tree = checkCompleteness(root.left)
   right_tree = checkCompleteness(root.right)
   if (left_tree.isPerfect == True and right_tree.isComplete == True and getHeight(left_tree.size) == getHeight(right_tree.size)) :
      ret_type.isComplete = True
      ret_type.isPerfect = right_tree.isPerfect
      ret_type.size = left_tree.size + right_tree.size + 1
      ret_type.rootTree = root
      return ret_type
   if (left_tree.isComplete == True and right_tree.isPerfect == True and getHeight(left_tree.size) == getHeight(right_tree.size) + 1):
      ret_type.isComplete = True
      ret_type.isPerfect = False
      ret_type.size = left_tree.size + right_tree.size + 1
      ret_type.rootTree = root
      return ret_type
      ret_type.isPerfect = False
      ret_type.isComplete = False
      ret_type.size =max(left_tree.size, right_tree.size)
      if(left_tree.size > right_tree.size ):
         ret_type.rootTree = left_tree.rootTree
      else:
         ret_type.rootTree = right_tree.rootTree
      return ret_type
def print_tree(root):
   if root is not None:
      print_tree(root.left)
      print(root.data, end = ', ')
      print_tree(root.right)
root = TreeNode(50)
root.left = TreeNode(30)
root.right = TreeNode(60)
root.left.left = TreeNode(5)
root.left.right = TreeNode(20)
root.right.left = TreeNode(45)
root.right.right = TreeNode(70)
root.right.left.left = TreeNode(10)
ans = checkCompleteness(root)
print( "Size:" , ans.size )
print("Inorder Traversal: ", end = '')
print_tree(ans.rootTree)

ইনপুট

root = TreeNode(50)
root.left = TreeNode(30)
root.right = TreeNode(60)
root.left.left = TreeNode(5)
root.left.right = TreeNode(20)
root.right.left = TreeNode(45)
root.right.right = TreeNode(70)
root.right.left.left = TreeNode(10)

আউটপুট:

Size: 4
Inorder Traversal: 10, 45, 60, 70,

  1. পাইথনে একটি বাইনারি গাছের সর্বাধিক প্রস্থ খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে বাইনারি ট্রির উল্লম্ব স্তর সাজানো আছে কি না তা খুঁজুন

  3. পাইথনে একটি প্রদত্ত বাইনারি ট্রিতে সবচেয়ে বড় পারফেক্ট সাবট্রি খুঁজুন

  4. পাইথন প্রোগ্রাম একটি অ্যারের বৃহত্তম উপাদান খুঁজে বের করতে