# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param pRoot TreeNode类
# @return TreeNode类
#
class Solution:
def Mirror(self, pRoot: TreeNode) -> TreeNode:
# write code here DFS
"""
step 1:先深度最左端的节点,遇到空树返回,处理最左端的两个子节点交换位置。
step 2:然后进入右子树,继续按照先左后右再回中的方式访问。
step 3:再返回到父问题,交换父问题两个子节点的值。
"""
if not pRoot:
return pRoot
left = self.Mirror(pRoot.left)
right = self.Mirror(pRoot.right)
pRoot.left = right
pRoot.right = left
return pRoot
# write code here BFS
"""
step 1:优先检查空树的情况。
step 2:使用栈辅助遍历二叉树,根节点先进栈。
step 3:遍历过程中每次弹出栈中一个元素,然后该节点左右节点分别入栈。
step 4:同时我们交换入栈两个子节点的值,因为子节点已经入栈了再交换,就不怕后续没有交换。
"""
"""s = []
s += [pRoot]
while s:
p = s.pop()
if p.left:
s += [p.left]
if p.right:
s += [p.right]
p.left, p.right = p.right, p.left
return pRoot"""