Ваша текущая функция меняет местами все ветки; нет особой необходимости возвращать дерево, так как у вас уже есть ссылка на него, если вам удалось вызвать метод в первую очередь. Но если вы все равно хотите вернуть такую ссылку, вы можете:
<code>def mirror(self):
if self.left == None and self.right == None:
<b>pass</b>
elif self.left == None and self.right != None:
t = self.right
self.right = self.left
self.left = t
self.left.mirror()
elif self.left != None and self.right == None:
t = self.right
self.right = self.left
self.left = t
self.right.mirror()
else:
t = self.right
self.right = self.left
self.left = t
self.left.mirror()
self.right.mirror()
<b>return self</b>
или проще:
def mirror(self):
if self.left is not None:
self.left.mirror()
if self.right is not None:
self.right.mirror()
self.left, self.right = self.right, self.left
return self
Если, с другой стороны , вам нужно новое дерево, независимое от исходного дерева, вам нужно построить его для возврата.
def mirror(self):
new_tree = ... # Whatever you do to create a root node from the root of self
# If the child pointers aren't already None after creating the node
new_tree.left = None
new_tree.right = None
if self.right is not None:
new_tree.left = self.right.mirror()
if self.left is not None:
new_tree.right = self.left.mirror()
return new_tree