Вот нерекурсивный способ сделать это в python, используя очереди. Класс Queue может быть инициализирован так:
class Queue(object):
def __init__(self):
self.items = []
def enqueue(self, item):
self.items.insert(0, item)
def dequeue(self):
if not self.is_empty():
return self.items.pop()
def is_empty(self):
return len(self.items) == 0
def peek(self):
if not self.is_empty():
return self.items[-1]
def __len__(self):
return self.size()
def size(self):
return len(self.items)
Класс, представляющий узел:
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.val = data
А вот метод, который выполняет основную задачу:
def mirror_tree_iterative(root):
if root is None:
return
q = Queue()
q.enqueue(root)
while(not q.is_empty()):
curr = q.peek()
q.dequeue()
curr.left, curr.right = curr.right, curr.left
if curr.left:
q.enqueue(curr.left)
if curr.right:
q.enqueue(curr.right)