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

তারপর আউটপুট আকার হিসাবে 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,