สมมติมี Binary Tree สองต้น ต้องตรวจสอบว่า Leaf Traversal (ลำดับ Leaf จากซ้ายไปขวา) เหมือนกันหรือไม่
เช่น Tree 1 และ Tree 2 มี Leaf Sequence [5, 7, 8] -> Output True

ขั้นตอนแก้ (Iterative DFS with Stack):
- ใช้ Stack s1, s2 สำหรับ Root1, Root2
- Pop Node ถ้าไม่ใช่ Leaf Push Right แล้ว Left (เพื่อให้ Left ถูก Process ก่อน)
- เมื่อเจอ Leaf ทั้งคู่ เปรียบเทียบค่า ถ้าไม่เท่ากัน Return False
- ถ้าหนึ่ง Tree จบก่อนอีกต้น Return False
ตัวอย่างโค้ด
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))
Input
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)
Output
True