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

Python দিয়ে বাইনারি ট্রি দিয়ে দिये गये নোডগুলোর লোয়েস্ট কমন Анসেস্টর বের করার প্রোগ্রাম


মান লাগিয়ে, আমাদের একটি বাইনারি ট্রি দেওয়া আছে এবং আমাদের ট্রির সব নোডের লোয়েস্ট কমন অ্যান্সেস্টর বের করতে বলা হয়েছে। বাইনারি ট্রিতে লোয়েস্ট কমন অ্যান্সেস্টর হল সেই নোড যা সবচেয়ে নিচে অবস্থিত এবং যার ডিসেন্ডেন্ট হিসেবে x1, x2, x3, ..., xn নোডগুলো থাকে। একটি নির্দিষ্ট নোড নিজেরাও তার ডিসেন্ডেন্ট হতে পারে। আমাদের নোডটি বের করে রিটার্ন করতে হবে। ইনপুটগুলো হল ট্রির রুট নোড এবং যেসব নোডের অ্যান্সেস্টর বের করতে হবে তার লিস্ট।

যেমন, ইনপুট যদি এমন হয়:

Python দিয়ে বাইনারি ট্রি দিয়ে দिये गये নোডগুলোর লোয়েস্ট কমন Анসেস্টর বের করার প্রোগ্রাম

এবং অ্যান্সেস্টর বের করতে হবে নোডগুলো [6, 8]; তবে আউটপুট হবে 7।

আউটপুট 7, কারণ নোড ৬ এবং ৮ যেসব নোডের ডিসেন্ডেন্ট, সেগুলোর মধ্যে সবচেয়ে নিচের নোড হল ৭।

এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব:

  • একটি ফাংশন fn() ডিফাইন করুন। এটি node নেবে:
    • যদি node null-এর মতো হয়, তবে node রিটার্ন করুন
    • অন্যথায় যদি node nodes-এ উপস্থিত থাকে, তবে node রিটার্ন করুন
    • left := fn(node.left), right := fn(node.right)
    • যদি left এবং right null না হয়, তবে node রিটার্ন করুন
    • অন্যথায়, যদি left বা right null না হয়, তবে node রিটার্ন করুন
  • nodes := একটি নতুন লিস্ট
  • node_list-এ থাকা প্রতিটি elem জন্য:
    • search_node(root, elem) nodes-এর শেষে ইনসার্ট করুন
  • nodes := nodes থেকে একটি নতুন সেট তৈরি করুন
  • fn(root) রিটার্ন করুন

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন:

উদাহরণ

import collections
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
def search_node(root, element):
    if (root == None):
        return None
    if (root.data == element):
        return root
    res1 = search_node(root.left, element)
    if res1:
        return res1
    res2 = search_node(root.right, element)
    return res2
def print_tree(root):
    if root is not None:
        print_tree(root.left)
        print(root.data, end = ', ')
        print_tree(root.right)
def solve(root, node_list):
    nodes = []
    for elem in node_list:
        nodes.append(search_node(root, elem))
    nodes = set(nodes)
    def fn(node):
        if not node:
            return node
        elif node in nodes:
            return node
        left, right = fn(node.left), fn(node.right)
        return node if left and right else left or right
    return fn(root)
root = make_tree([5, 3, 7, 2, 4, 6, 8])
print(solve(root, [6,8]).data)

ইনপুট

make_tree([5, 3, 7, 2, 4, 6, 8]), [6, 8]

আউটপুট

7

  1. পাইথনে বাইনারি ট্রির দ্বিতীয় গভীরতম নোড নির্ণয়

  2. পাইথনে বাইনারি ট্রিতে দুটি উপাদানের সাধারণ পূর্বপুরুষ খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে বাইনারি ট্রির Lowest Common Ancestor (সর্বনিম্ন কমন অ্যানসেস্ট্র)

  4. পাইথনে বাইনারি সার্চ ট্রিতে লোয়েস্ট কমন আনসেসটর