题目要求返回给定二叉树的镜像二叉树,  观察镜像二叉树与原二叉树的特点可知: 镜像二叉树的左子树是原二叉树的右子树,因此可以采用后序递归遍历。先翻转左子树上所有结点的左、右孩子结点,再转右子树左、右孩子,最后转根结点的左右孩子结点即可。

/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 *    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return TreeNode类
     */
    TreeNode* Mirror(TreeNode* pRoot) {
        // 后续遍历
        if(!pRoot)                                         // 空树直接返回nullptr 
            return nullptr;
        TreeNode *l = nullptr, *r = nullptr;         // l表示左子树翻转后的根节点, r表示右子树翻转后的根结点
        l = Mirror(pRoot->left);                         // 翻转左子树   
        r = Mirror(pRoot->right);                        // 翻转右子树
        auto tmp = pRoot->left;                         // 翻转根结点的左、右子树  
        pRoot->left = pRoot->right;
        pRoot->right = tmp;
        return pRoot;                                     // 返回翻转后的根结点
    }
};