কম্পিউটার

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


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

গাছের নোড গঠন নিচের মত -

TreeNode:
   data: <integer>
   left: <pointer of TreeNode>
   right: <pointer of TreeNode>
   parent: <pointer of TreeNode>

সমাধান খোঁজার সময় আমাদের প্যারেন্ট পয়েন্টার ব্যবহার করতে হবে।

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

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

এবং x =3, y =7; তাহলে আউটপুট হবে 5।

3 এবং 7 উভয়ই 5 এর বংশধর, তাই উত্তর হবে 5।

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

  • path_p_r :=একটি নতুন তালিকা

  • যখন x শূন্য নয়, করুন

    • path_p_r

      এর শেষে x ঢোকান
    • x :=x

      এর পিতামাতা
  • y শূন্য না হলে, করুন

    • যদি y path_p_r-এ উপস্থিত থাকে, তাহলে

      • y

        ফেরত দিন
    • y :=y

      এর পিতামাতা

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

উদাহরণ

class TreeNode:
   def __init__(self, data, left = None, right = None, parent = None):
      self.data = data
      self.left = left
      self.right = right
      self.parent = parent
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, parent=temp)
         else:
            temp.left = TreeNode(0,parent=temp)
         break
      else:
         que.append(temp.left)
   if (not temp.right):
      if data is not None:
         temp.right = TreeNode(data,parent=temp)
      else:
         temp.right = TreeNode(0,parent=temp)
      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 solve(x, y):
   path_p_r = []
   while x:
      path_p_r.append(x)
      x = x.parent
   while y:
      if y in path_p_r:
         return y
      y = y.parent
root = make_tree([5, 3, 7, 2, 4, 1, 7, 6, 8, 10])
print(solve(search_node(root, 3), search_node(root, 7)).data)

ইনপুট

[5, 3, 7, 2, 4, 1, 7, 6, 8, 10], 3, 7

আউটপুট

5

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

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

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

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