ধরুন, আমাদের একটি বাইনারি ট্রি দেওয়া হয়েছে এবং এছাড়াও দুটি নির্দিষ্ট নোড 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