কম্পিউটার

পাইথন ব্যবহার করে প্রদত্ত নোডের একটি বাইনারি গাছের সর্বনিম্ন সাধারণ পূর্বপুরুষ খুঁজে বের করার প্রোগ্রাম


ধরুন, আমাদের একটি বাইনারি গাছ দেওয়া হয়েছে এবং গাছের সমস্ত নোডের সর্বনিম্ন সাধারণ পূর্বপুরুষ খুঁজে বের করতে বলা হয়েছে। একটি বাইনারি গাছের সর্বনিম্ন সাধারণ পূর্বপুরুষ হল সর্বনিম্ন নোড যার মধ্যে x1, x2, x3,...., xn হল বংশধর। একটি নির্দিষ্ট নোড নিজেই একটি বংশধর হতে পারে। আমাদের নোডটি খুঁজে বের করতে হবে এবং এটিকে আউটপুট হিসাবে ফেরত দিতে হবে। ইনপুটগুলি হল গাছের মূল নোড এবং নোডগুলির তালিকা যা আমাদের পূর্বপুরুষ খুঁজে বের করতে হবে৷

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

পাইথন ব্যবহার করে প্রদত্ত নোডের একটি বাইনারি গাছের সর্বনিম্ন সাধারণ পূর্বপুরুষ খুঁজে বের করার প্রোগ্রাম

এবং নোডগুলির তালিকা যা আমাদের পূর্বপুরুষদের খুঁজে বের করতে হবে [6, 8]; তাহলে আউটপুট হবে 7.

আউটপুট হল 7, কারণ সর্বনিম্ন নোড যার মধ্যে নোড 6 এবং 8 এর বংশধর হল 7৷

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

  • একটি ফাংশন fn() সংজ্ঞায়িত করুন। এটি নোড গ্রহণ করবে

    • যদি নোড নাল এর মত হয়, তাহলে

      • রিটার্ন নোড

    • অন্যথায় যখন নোড নোডগুলিতে প্রিসেট করা হয়, তখন

      • রিটার্ন নোড

    • left :=fn (নোডের বাম দিকে),

    • ডান :=fn(নোডের ডানদিকে)

    • যদি বাম এবং ডান শূন্য না হয়, তাহলে

      • রিটার্ন নোড

    • অন্যথায়,

      • যদি বাম বা ডান শূন্য না হয়, তাহলে

        • রিটার্ন নোড

  • নোডস :=একটি নতুন তালিকা

  • node_list এ প্রতিটি উপাদানের জন্য, করুন

    • নোডের শেষে search_node(root, elem) সন্নিবেশ করুন

  • নোডস :=নোড থেকে একটি নতুন সেট

  • ফেরত 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. পাইথনে একটি বাইনারি গাছের সর্বনিম্ন সাধারণ পূর্বপুরুষ

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