বাইনারি ট্রির মিরর ইমেজ তৈরি করতে লেফট-রাইট চাইল্ড সোয়্যাপ করা হয়, তারপর BFS দিয়ে উভয় ট্রি প্রিন্ট করা হয়।
উদাহরণ
from collections import deque
class BinaryTreeNode:
def __init__(self, key):
self.key = key
self.left = None
self.right = None
def insert_left(self, node):
self.left = node
def insert_right(self, node):
self.right = node
def find(self, key):
if self.key == key:
return self
for child in (self.left, self.right):
if child:
found = child.find(key)
if found:
return found
return None
def mirror_copy(self):
"""মিরর কপি রিটার্ন করে (রিকার্সিভ)"""
mirror = BinaryTreeNode(self.key)
if self.right:
mirror.left = self.right.mirror_copy()
if self.left:
mirror.right = self.left.mirror_copy()
return mirror
def bfs(self):
queue = deque([self])
while queue:
node = queue.popleft()
print(node.key, end=" ")
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
# ইন্টারেক্টিভ ডেমো
root = None
while True:
cmd = input("কমান্ড (insert/mirror/quit): ").split()
if not cmd: continue
if cmd[0] == 'insert':
data = int(cmd[1])
node = BinaryTreeNode(data)
if cmd[2] == 'at':
root = node
elif cmd[2] == 'left':
parent = root.find(int(cmd[4])) if root else None
if parent: parent.insert_left(node)
elif cmd[2] == 'right':
parent = root.find(int(cmd[4])) if root else None
if parent: parent.insert_right(node)
elif cmd[0] == 'mirror':
if root:
print("মুল ট্রি BFS:", end=" ")
root.bfs()
print()
mirror = root.mirror_copy()
print("মিরর ট্রি BFS:", end=" ")
mirror.bfs()
print()
elif cmd[0] == 'quit':
break
আউটপুট
কমান্ড (insert/mirror/quit): insert 6 at root কমান্ড (insert/mirror/quit): insert 9 left of 6 কমান্ড (insert/mirror/quit): insert 4 right of 6 কমান্ড (insert/mirror/quit): mirror মুল ট্রি BFS: 6 9 4 মিরর ট্রি BFS: 6 4 9 কমান্ড (insert/mirror/quit): quit
ব্যাখ্যা
mirror_copyরিকার্সিভভাবে লেফট-রাইট সোয়্যাপ করে নতুন ট্রি বানায়।মুল ট্রি অপরিবর্তিত থাকে।
BFS (লেভেল অর্ডার) দিয়ে উভয় ট্রি প্রিন্ট করা হয়।
মিরর ট্রিতে লেফট-রাইট সাবট্রি এক্সচেঞ্জ হয়ে থাকে।