কম্পিউটার টিউটোরিয়াল

পাইথনে বাইনারি ট্রিতে একই বাম ও ডান সাবট্রি বিশিষ্ট সর্বোচ্চ সাবট্রি বের করা

ধরা যাক একটি বাইনারি ট্রি আছে। আমাদের একই বাম ও ডান সাবট্রি বিশিষ্ট সর্বোচ্চ সাবট্রি বের করতে হবে। পছন্দসই টাইম কমপ্লেক্সিটি O(n)।

ইনপুট ট্রি চিত্রে দেওয়া আছে, আউটপুট সাবট্রি রুট 70 এবং আকার 7।

সমাধানের ধাপসমূহ (পোস্ট-অর্ডার ট্রাভারসাল + এনকোডিং)

  • solve(root, encode, maxSize, maxNode) ফাংশন:
    • যদি root is None: return 0
    • left_list, right_list = [""], [""]
    • ls = solve(root.left, left_list, maxSize, maxNode)
    • rs = solve(root.right, right_list, maxSize, maxNode)
    • size = ls + rs + 1
    • যদি left_list[0] == right_list[0]: size > maxSize[0] হলে maxSize এবং maxNode আপডেট করুন
    • encode[0] = "|" + left_list[0] + "|" + str(root.data) + "|" + right_list[0] + "|"
    • return size
  • মেইন ফাংশনে maximum=[0], encode=[""], solve কল করুন।

উদাহরণ

class TreeNode:
    def __init__(self, data):
        self.data = data
        self.left = self.right = None
def solve(root, encode, maxSize, maxNode):
    if root == None: return 0
    left_list = [""]; right_list = [""]
    ls = solve(root.left, left_list, maxSize, maxNode)
    rs = solve(root.right, right_list, maxSize, maxNode)
    size = ls + rs + 1
    if left_list[0] == right_list[0]:
        if size > maxSize[0]:
            maxSize[0] = size
            maxNode[0] = root
    encode[0] = encode[0] + "|" + left_list[0] + "|"
    encode[0] = encode[0] + "|" + str(root.data) + "|"
    encode[0] = encode[0] + "|" + right_list[0] + "|"
    return size
def largestSubtree(node, maxNode):
    maximum = [0]
    encode = [""]
    solve(node, encode, maximum, maxNode)
    return maximum
# ট্রি তৈরি
root = TreeNode(55)
root.left = TreeNode(15)
root.right = TreeNode(70)
root.left.left = TreeNode(10)
root.left.right = TreeNode(25)
root.right.left = TreeNode(75)
root.right.left.left = TreeNode(65)
root.right.left.right = TreeNode(80)
root.right.right = TreeNode(75)
root.right.right.left = TreeNode(65)
root.right.right.right = TreeNode(80)
maxNode = [None]
maximum = largestSubtree(root, maxNode)
print("Root of largest sub-tree", maxNode[0].data)
print("and its size is ", maximum)

ইনপুট

root = TreeNode(55)
root.left = TreeNode(15)
root.right = TreeNode(70)
root.left.left = TreeNode(10)
root.left.right = TreeNode(25)
root.right.left = TreeNode(75)
root.right.left.left = TreeNode(65)
root.right.left.right = TreeNode(80)
root.right.right = TreeNode(75)
root.right.right.left = TreeNode(65)
root.right.right.right = TreeNode(80)

আউটপুট

Root of largest sub-tree 70 and its size is [7]
  1. পাইথনে বাইনারি ট্রি আপডেট করে লেফট ও রাইট সাবট্রির যোগফল নিজসহ খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে বাইনারি ট্রিতে রুট থেকে লিফ পর্যন্ত যেকোনো পথের সর্বোচ্চ যোগফল খুঁজে বের করার প্রোগ্রাম

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

  4. পাইথনে বাইনারি ট্রি-র সর্বোচ্চ পারফেক্ট সাবট্রির আকার নির্ণয়