মান লিজিয়ে আমাদের দুটি বাইনারি ট্রি (binary tree) আছে। আমাদের যাচাই করতে হবে এই দুটি ট্রির লীফ ট্রাভার্সেল (leaf traversal) একই কিনা। আমরা জানি লীফ ট্রাভার্সেল হল বাম থেকে ডানে লীফ নোডগুলোর ট্রাভার্সেল সিকোয়েন্স।
যেমন, ইনপুট যদি:

তবে আউটপুট হবে True কারণ দুটি ট্রির লীফ ট্রাভার্সেল সিকোয়েন্স একই, যা হল [5, 7, 8]।
সমাধানের ধাপসমূহ
s1 :=একটি নতুন লিস্ট,s2 :=আরেকটি নতুন লিস্টr1s1-এ এবংr2s2-এ ইনসার্ট করুন- যখন
s1এবংs2খালি নয়, করুন:- যদি
s1খালি হয় অথবাs2খালি হয়, তবে:Falseরিটার্ন করুন
r1_node := s1-এর লাস্ট নোড, এবংs1-এ থেকে ডিলিট করুন- যখন
r1_nodeনাল নয় এবংr1_nodeলীফ নয়, করুন:- যদি
r1_node-এর রাইট নাল নয়, তবে:r1_node-এর রাইটs1-এর শেষে ইনসার্ট করুন
- যদি
r1_node-এর লেফট নাল নয়, তবে:r1_node-এর লেফটs1-এর শেষে ইনসার্ট করুনr1_node := s1-এর লাস্ট নোড, এবংs1-এ থেকে ডিলিট করুন
- যদি
r2_node := s2-এর লাস্ট নোড, এবংs2-এ থেকে ডিলিট করুন- যখন
r2_nodeনাল নয় এবংr2_nodeলীফ নয়, করুন:- যদি
r2_node-এর রাইট নাল নয়, তবে:r2_node-এর রাইটs2-এর শেষে ইনসার্ট করুন
- যদি
r2_node-এর লেফট নাল নয়, তবে:r2_node-এর লেফটs2-এর শেষে ইনসার্ট করুন
r2_node := s2-এর লাস্ট নোড, এবংs2-এ থেকে ডিলিট করুন
- যদি
- যদি
r1_nodeনাল হয় এবংr2_nodeনাল নয়, তবে:Falseরিটার্ন করুন
- যদি
r1_nodeনাল নয় এবংr2_nodeনাল হয়, তবে:Falseরিটার্ন করুন
- যদি
r1_nodeএবংr2_nodeদুটোই নাল নয়, তবে:- যদি
r1_node-এর ভ্যালুr2_node-এর ভ্যালু সমান না হয়, তবে:Falseরিটার্ন করুন
- যদি
- যদি
Trueরিটার্ন করুন
উদাহরণ
বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন:
class TreeNode:
def __init__(self, x):
self.val = x
self.left = self.right = None
def is_leaf(self):
return self.left == None and self.right == None
def solve(r1, r2):
s1 = []
s2 = []
s1.append(r1)
s2.append(r2)
while len(s1) != 0 or len(s2) != 0:
if len(s1) == 0 or len(s2) == 0:
return False
r1_node = s1.pop(-1)
while r1_node != None and not r1_node.is_leaf():
if r1_node.right != None:
s1.append(r1_node.right)
if r1_node.left != None:
s1.append(r1_node.left)
r1_node = s1.pop(-1)
r2_node = s2.pop(-1)
while r2_node != None and not r2_node.is_leaf():
if r2_node.right != None:
s2.append(r2_node.right)
if r2_node.left != None:
s2.append(r2_node.left)
r2_node = s2.pop(-1)
if r1_node == None and r2_node != None:
return False
if r1_node != None and r2_node == None:
return False
if r1_node != None and r2_node != None:
if r1_node.val != r2_node.val:
return False
return True
root1 = TreeNode(2)
root1.left = TreeNode(3)
root1.right = TreeNode(4)
root1.left.left = TreeNode(5)
root1.right.left = TreeNode(7)
root1.right.right = TreeNode(8)
root2 = TreeNode(1)
root2.left = TreeNode(6)
root2.right = TreeNode(9)
root2.left.right = TreeNode(5)
root2.right.left = TreeNode(7)
root2.right.right = TreeNode(8)
print(solve(root1, root2))
ইনপুট
root1 = TreeNode(2) root1.left = TreeNode(3) root1.right = TreeNode(4) root1.left.left = TreeNode(5) root1.right.left = TreeNode(7) root1.right.right = TreeNode(8) root2 = TreeNode(1) root2.left = TreeNode(6) root2.right = TreeNode(9) root2.left.right = TreeNode(5) root2.right.left = TreeNode(7) root2.right.right = TreeNode(8)
আউটপুট
True