# 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"""